搜索
bottom↓
回复: 9

linux 操作串口 怎么获得当前接收缓冲区的数据个数

[复制链接]

出0入0汤圆

发表于 2011-5-13 17:31:08 | 显示全部楼层 |阅读模式
最近研究linux的串口通讯,因为隔了一层操作系统,对串口的操作很不爽。ttys设备以文件形式打开,读取数据时,如果没有接收到就返回0,当然阻塞模式不用的前提下。我试着用了软中断,可是发现软终端不够及时,如果数据量大,就会来不及响应。

因为读取串口用的read函数,需要指定读入数据个数。请问大家,如何才能获得缓冲区已经接收到的数据个数呀。求真相,理论上,这linux应该很完备。

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2011-5-13 19:30:40 | 显示全部楼层
顶呀

出0入54汤圆

发表于 2011-5-13 20:51:13 | 显示全部楼层
好象获取不到吧,读出返回值小于你读取个数就是读完了。

出0入0汤圆

 楼主| 发表于 2011-5-13 21:58:47 | 显示全部楼层
读取时,数据个数是需要在read函数里指明,如果linux底层接收的数据少于我想要的数据个数,它会在后面的补充其他数据给我,如0。如果我的数据里有0,那么正好会冲突导致我无数正常使用。我是这么想的,linux串口一开始设计就是以ascii的形式使用,所以完全没有考虑直接传数据,如果直接传数据会建议用底层提供的二进制传送协议。gps就是以ascii明码的形式使用。真不明白,这样还要把ascii解码,其实用起来一点都不方便。

出0入0汤圆

发表于 2011-5-13 23:17:07 | 显示全部楼层
不会补充任何数据,每次read函数返回都是实际读取到的字节个数

出0入54汤圆

发表于 2011-5-13 23:18:15 | 显示全部楼层
怎么会补0呢?你试下就知道了。。

出0入0汤圆

 楼主| 发表于 2011-5-14 19:04:19 | 显示全部楼层
谢谢了,解决问题了,原来read函数读回以后还会返回一个读出数据的个数。以前就直接用  read(fd,data,255);   现在改成了datanum=read(fd,data,255);这样就可以知道到底读回了多少个数据。

linux内核的那些头文件定义都在arm-linux-gcc这个编译器里面,如果修改了内核的一些系统相关的源代码,是不是编译器那些头文件也要修改呀。这个内核和编译器到底是什么关系呢?

出0入54汤圆

发表于 2011-5-14 19:45:08 | 显示全部楼层
头文件啊。。。

我也是菜鸟,你不问这个问题我还没仔细去考虑,刚才做了下实验确认了下:


编绎内核驱动的时候头文件是包含的是内核文件树文件夹include/里面的头文件
一般包含的比如<linux/init.h>是在include/linux/里面
如<asm/uccess.h>是在include/asm-generic/里面
还有如<mach/hardware.h>是在对应的芯片匹配文件夹里面,比如我的at91sam9260,则在arch/arm/mach-at91/include/mach/里面


编绎应用程序的时候的头文件是在交叉编绎工具的arm/usr/include/里面(以我的芯片为例)

修改内核源代码的话需要重新编绎然后下到板上。。

出0入0汤圆

 楼主| 发表于 2011-5-15 08:28:03 | 显示全部楼层
如果内核修改了,如添加了一个什么特殊的程序接口(对数据传输什么进行了特别处理的函数)那么编译的核就可以对外提供这样一个接口了。应用程序如果需要调用这个接口函数,那么按照默认编译器目录包含的头文件是没有这个函数的。

所以我觉得 编译器目录有点像 51 的keil安装目录里面的那些头文件,是一些常用的而已,要具体到某个函数,需要自己添加。
而内核可以当做一个应用程序来对待。
最近用4.1.2的工具编译了内核,支持eabi。busybox还是用的从前的那个3.4.1的编译器编译的busybox1.6。居然可以使用。前提是我留下了busybox可能会调用的动态链接库。觉得不可思议,难道busybox就不依赖内核某些函数。

前些时间去咨询某老师,居然他们还在用qte2.1.10那样的版本开发应用程序。我一开始也搭建了一个,记事本里写程序,太坑爹了。于是果断的

编译了一个qte4.6.2,然后把各种需要的库copy到板子上。居然可以运行,期间最重要的是一个识别程序的问题,一开始不识别,后来用二进制工具查看程序,发现需要一个什么库,添加上就可以识别了,然后按照各种错误陆续加入qte库,字体什么的。话说用qt creator开发应用程序确实很爽。带自动补全,像vc一样的感觉。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-10-3 06:22

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

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