bruce_helen 发表于 2014-9-4 19:18:48

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

linux下的串口编程和windows还是有区别的。
这两天参考APUE(Unix环境高级编程)写了raw模式串口通信(没有任何中间层的处理,纯粹的数据收发),这种方式是跟外围模块通信的常用方式。

头文件


定义使用的方法



源代码


编辑原因:修改错别字

bruce_helen 发表于 2014-9-4 20:57:18

占楼         

zndz410 发表于 2014-9-4 21:02:26

谢谢分亨.

bruce_helen 发表于 2014-9-4 21:04:35

zndz410 发表于 2014-9-4 21:02
谢谢分亨.

谢谢支持 {:handshake:}

fengyunyu 发表于 2014-9-4 21:08:41

lz的编程风格不错!

avr-arm 发表于 2014-9-4 21:09:46

学习了,风格不错!

GunGun 发表于 2014-9-4 21:20:35

不错,可以借鉴

kent.c 发表于 2014-9-12 09:24:50

谢谢分亨.

cloudxxcloud 发表于 2014-9-12 09:30:01

楼主主要搞应用开发了?

FSL_TICS_Rita 发表于 2014-9-12 09:42:20

非常不错,感谢楼主整理并分享啊~~

bruce_helen 发表于 2014-9-12 12:09:34

cloudxxcloud 发表于 2014-9-12 09:30
楼主主要搞应用开发了?

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

songjie 发表于 2014-9-12 21:38:39

好东西,学习。这个源代码在哪个工具编译调试啊~

654705188 发表于 2014-9-13 08:19:00

好东西               

bruce_helen 发表于 2014-9-13 08:43:04

songjie 发表于 2014-9-12 21:38
好东西,学习。这个源代码在哪个工具编译调试啊~

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

blueice1108 发表于 2014-9-18 09:00:14

LZ能否帮忙看看 发送后会有数据接收进来
接收会有Segmentation fault
输出讯息如下
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
buf=0
send
Segmentation fault

bruce_helen 发表于 2014-9-18 13:49:32

blueice1108 发表于 2014-9-18 09:00
LZ能否帮忙看看 发送后会有数据接收进来
接收会有Segmentation fault
输出讯息如下


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

codefish 发表于 2014-9-18 14:29:39

谢谢分享!

blueice1108 发表于 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++;
      len_tmp--;
   }

   return 1;
}

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

bruce_helen 发表于 2014-9-18 16:55:18

blueice1108 发表于 2014-9-18 14:35
感谢LZ回答 找到问题
int dataget(int fd, char* buf, int len)
{


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

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

blueice1108 发表于 2014-9-18 21:00:27

本帖最后由 blueice1108 于 2014-9-18 21:03 编辑

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

bruce_helen 发表于 2014-9-18 21:05:39

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

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

blueice1108 发表于 2014-9-18 21:12:08

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

谢谢
初接触linux水很深阿
页: [1]
查看完整版本: 【分享】i.MX6Q linux串口编程