搜索
bottom↓
回复: 21

【分享】i.MX6Q linux串口编程

[复制链接]

出0入0汤圆

发表于 2014-9-4 19:18:48 | 显示全部楼层 |阅读模式
linux下的串口编程和windows还是有区别的。
这两天参考APUE(Unix环境高级编程)写了raw模式串口通信(没有任何中间层的处理,纯粹的数据收发),这种方式是跟外围模块通信的常用方式。

头文件


定义使用的方法



源代码


编辑原因:修改错别字

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-9-4 20:57:18 | 显示全部楼层
占楼         

出0入0汤圆

发表于 2014-9-4 21:02:26 | 显示全部楼层
谢谢分亨.

出0入0汤圆

 楼主| 发表于 2014-9-4 21:04:35 | 显示全部楼层

谢谢支持

出100入101汤圆

发表于 2014-9-4 21:08:41 | 显示全部楼层
lz的编程风格不错!

出0入0汤圆

发表于 2014-9-4 21:09:46 | 显示全部楼层
学习了,风格不错!

出0入0汤圆

发表于 2014-9-4 21:20:35 | 显示全部楼层
不错,可以借鉴

出0入0汤圆

发表于 2014-9-12 09:24:50 | 显示全部楼层
谢谢分亨.

出0入114汤圆

发表于 2014-9-12 09:30:01 | 显示全部楼层
楼主主要搞应用开发了?

出0入0汤圆

发表于 2014-9-12 09:42:20 | 显示全部楼层
非常不错,感谢楼主整理并分享啊~~

出0入0汤圆

 楼主| 发表于 2014-9-12 12:09:34 | 显示全部楼层
cloudxxcloud 发表于 2014-9-12 09:30
楼主主要搞应用开发了?

对,因为项目上主要还是编写应用代码。
因为飞思卡尔把芯片片上驱动都做好了。我们做的是工业设备,对显示没什么要求。外设主要使用串口,CANBUS,TCP,这些玩意直接操作应用层即可。现在还没机会接触底层编程。

出0入0汤圆

发表于 2014-9-12 21:38:39 来自手机 | 显示全部楼层
好东西,学习。这个源代码在哪个工具编译调试啊~

出0入0汤圆

发表于 2014-9-13 08:19:00 | 显示全部楼层
好东西               

出0入0汤圆

 楼主| 发表于 2014-9-13 08:43:04 | 显示全部楼层
songjie 发表于 2014-9-12 21:38
好东西,学习。这个源代码在哪个工具编译调试啊~

linux下使用gcc编译即可,调试使用gdb。

出0入0汤圆

发表于 2014-9-18 09:00:14 | 显示全部楼层
LZ能否帮忙看看 发送后会有数据接收进来
接收会有Segmentation fault
输出讯息如下
buf[236]=0
buf[237]=0
buf[238]=0
buf[239]=0
buf[240]=0
buf[241]=0
buf[242]=0
buf[243]=0
buf[244]=0
buf[245]=0
buf[246]=0
buf[247]=0
buf[248]=0
buf[249]=0
buf[250]=0
buf[251]=0
buf[252]=0
buf[253]=0
buf[254]=0
send
Segmentation fault

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-18 13:49:32 | 显示全部楼层
blueice1108 发表于 2014-9-18 09:00
LZ能否帮忙看看 发送后会有数据接收进来
接收会有Segmentation fault
输出讯息如下

一个函数指针写错了,另外不要把单片机的编程思想带到操作系统下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-18 14:29:39 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2014-9-18 14:35:58 | 显示全部楼层
本帖最后由 blueice1108 于 2014-9-18 15:11 编辑

感谢LZ回答 找到问题
int dataget(int fd, char* buf, int len)
{
   int j=0;//需初始化值
   int len_tmp;
   len_tmp=len;
   printf("fd=%d\n",fd);
   printf("len=%d\n",len_tmp);
   
   while (len_tmp>0)
   {
      printf("buf[%d]=%d\n",j,buf[j]);
      j++;
      len_tmp--;
   }

   return 1;
}

另外想请问LZ有做过串口切换吗
就是有3个串口同时有数据进来 需译码
LZ的方法是另外建一个thread
网上方法都是用Select居多
Signal好像不能指定哪个串口

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-18 16:55:18 | 显示全部楼层
blueice1108 发表于 2014-9-18 14:35
感谢LZ回答 找到问题
int dataget(int fd, char* buf, int len)
{

不太明白你串口切换是什么意思?
同时接收3路串口数据,然后处理?-------->直接调用我的接口,初始化三个串口的实例,每个串口都有单独的处理函数,很好弄啊。
还是接收一路串口信息,然后通过另外一路发送出去? ---------> 这个也一样,初始化不同的串口实例,会有单独的处理函数。

用单独的线程处理接收数据简单,那个select语句太多,不清晰

出0入0汤圆

发表于 2014-9-18 21:00:27 | 显示全部楼层
本帖最后由 blueice1108 于 2014-9-18 21:03 编辑

同时接收3路串口数据,然后处理(用安卓)~~
LZ对蓝芽熟悉吗
我也是IMX6平台

出0入0汤圆

 楼主| 发表于 2014-9-18 21:05:39 | 显示全部楼层
blueice1108 发表于 2014-9-18 21:00
同时接收3路串口数据,然后处理(用安卓)~~
LZ对蓝芽熟悉吗
我也是IMX6平台

同时接收三路串口数据没问题
蓝牙没弄过,不过花点时间能搞出来

出0入0汤圆

发表于 2014-9-18 21:12:08 | 显示全部楼层
bruce_helen 发表于 2014-9-18 21:05
同时接收三路串口数据没问题
蓝牙没弄过,不过花点时间能搞出来

谢谢
初接触linux  水很深阿
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 17:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表