【分享】i.MX6Q linux串口编程
linux下的串口编程和windows还是有区别的。这两天参考APUE(Unix环境高级编程)写了raw模式串口通信(没有任何中间层的处理,纯粹的数据收发),这种方式是跟外围模块通信的常用方式。
头文件
定义使用的方法
源代码
编辑原因:修改错别字 占楼 谢谢分亨. zndz410 发表于 2014-9-4 21:02
谢谢分亨.
谢谢支持 {:handshake:} lz的编程风格不错! 学习了,风格不错! 不错,可以借鉴 谢谢分亨. 楼主主要搞应用开发了? 非常不错,感谢楼主整理并分享啊~~ cloudxxcloud 发表于 2014-9-12 09:30
楼主主要搞应用开发了?
对,因为项目上主要还是编写应用代码。
因为飞思卡尔把芯片片上驱动都做好了。我们做的是工业设备,对显示没什么要求。外设主要使用串口,CANBUS,TCP,这些玩意直接操作应用层即可。现在还没机会接触底层编程。 好东西,学习。这个源代码在哪个工具编译调试啊~ 好东西 songjie 发表于 2014-9-12 21:38
好东西,学习。这个源代码在哪个工具编译调试啊~
linux下使用gcc编译即可,调试使用gdb。 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
blueice1108 发表于 2014-9-18 09:00
LZ能否帮忙看看 发送后会有数据接收进来
接收会有Segmentation fault
输出讯息如下
一个函数指针写错了,另外不要把单片机的编程思想带到操作系统下。
谢谢分享! 本帖最后由 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好像不能指定哪个串口
blueice1108 发表于 2014-9-18 14:35
感谢LZ回答 找到问题
int dataget(int fd, char* buf, int len)
{
不太明白你串口切换是什么意思?
同时接收3路串口数据,然后处理?-------->直接调用我的接口,初始化三个串口的实例,每个串口都有单独的处理函数,很好弄啊。
还是接收一路串口信息,然后通过另外一路发送出去? ---------> 这个也一样,初始化不同的串口实例,会有单独的处理函数。
用单独的线程处理接收数据简单,那个select语句太多,不清晰 本帖最后由 blueice1108 于 2014-9-18 21:03 编辑
同时接收3路串口数据,然后处理(用安卓)~~
LZ对蓝芽熟悉吗
我也是IMX6平台 blueice1108 发表于 2014-9-18 21:00
同时接收3路串口数据,然后处理(用安卓)~~
LZ对蓝芽熟悉吗
我也是IMX6平台
同时接收三路串口数据没问题
蓝牙没弄过,不过花点时间能搞出来 bruce_helen 发表于 2014-9-18 21:05
同时接收三路串口数据没问题
蓝牙没弄过,不过花点时间能搞出来
谢谢
初接触linux水很深阿
页:
[1]