免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ljwilliam

[驱动] 串口接收GPS模块发送的信息,接收上丢失数据 [复制链接]

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-18 19:35 |显示全部楼层
回复 45# ljwilliam


    测试有结果了吗?

论坛徽章:
0
发表于 2010-11-18 20:56 |显示全部楼层
回复 51# smalloc


    应用层用read循环读取,内核里面也添加相应的代码,同时将数据保存到不同的文本里面,里面数据是一一对应的,没有了直接cat而导致的数据大量无故丢失的情况。谢谢指点,看起来cat是有点自身上的缺陷,不适合这里的调试。
   改小了FIFO的触发门限到1字节,数据还是丢失,改为最大的触发门限14字节(这里的FIFO为16字节),也还是丢失。默认的触发门限是8字节。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-18 21:21 |显示全部楼层
本帖最后由 smalloc 于 2010-11-18 21:43 编辑

回复 52# ljwilliam


    晕 竟然没看明白. 我之前是这样认为的
1.cat 重定向到一个文件中.抛弃所有的print到终端的操作.包括内核中添加的printk.这是最简单也是最快的测试方法,或者你改成more加管道也可以
2.在以上不再丢失.或者丢失概率大大缩小的情况下 选择门限 进一步减小丢失概率

>>改小了FIFO的触发门限到1字节,数据还是丢失
不太明白这里的减小门限是在以上第一步改之前还是改之后

其实我也很想知道:
1.到底是print到终端本身的问题. 还是你说的cat本身的问题,cat本身就是read write实现的.从一个文件copy到另一个文件
2.如果是在改了1的基础上减小门限又重新发生丢失这个实在无法想通.只能说我对overrun的理解有问题

另验证1你无需在内核里加任何保存数据的东西.因为你知道正确的完整数据是什么

论坛徽章:
0
发表于 2010-11-19 00:25 |显示全部楼层
回复  ljwilliam


    晕 竟然没看明白. 我之前是这样认为的
1.cat 重定向到一个文件中.抛弃所有的pr ...
smalloc 发表于 2010-11-18 21:21



      对于门限理论上应该是越大越好,要不就不会有人把fifo做的很大了。

论坛徽章:
0
发表于 2010-11-19 09:35 |显示全部楼层
回复 53# smalloc


    首先,我在看了您的帖子之后测试的方法是,应用程序上是read出数据,不printf,而是写到某个文件中。我在内核中添加代码,将8250.c的中断中读到的ch数据写入到另外一个文件,这是为了测试GPS数据的丢失到底是从哪里开始的,结果两个文件的内容是一一对应的,就是说明问题来自更底层。
   在以上的基础上,我将FIFO的门限设定在了1个字节和14个字节,两者都还是丢失数据,会有overrun,至于频率来说,因为GPS模块的数据都很多,是否减少了overrun的频率不是很好判断。
  
   1.prinfk到终端,看起来是会影响终端的数据。 具体我觉得是这样,printk影响了终端的数据,而外面的cat只是上面的搬运,问题是出在下面printk把数据弄的丢失了,造成了上层的丢失加剧。
   2.改到1字节门限,我想过,这样和没有FIFO应该是一样的了吧?没有FIFO的也是串口有数据就进中断,看起来是加快了数据的读取。但是overrun是因为没有足够的空间来存放数据而导致的数据丢失,每次都是1字节在读取,读取速度和处理不够快的话,丢失该更多吧?
   
   那么是不是中断的时间有问题?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-19 09:41 |显示全部楼层
回复 55# ljwilliam


    还是没看懂你的意思...
我想明确知道去掉print后到底还丢失数据吗?或者丢失概率变小没有?

论坛徽章:
0
发表于 2010-11-19 09:41 |显示全部楼层
回复 54# EZWORD


    我感觉门限是个微妙的东西,未必是越大越好。 因为比如说门限设定为最大值14,那么对于16字节的FIFO只剩下2字节的时候,触发读取的中断操作。那么这里的可能是还有数据继续到来,那么只有2字节可以存放了,多了就会丢失。当然这是很极端的情况,就是在程序读取完这14字节的东西之前,来了很多,是不是真是这样,我也只是猜测,未进行具体的测试。。。。
   因为我看一般的触发门限,默认值都不是最大的,一般是中间的几个触发门限,但是不绝对。

论坛徽章:
0
发表于 2010-11-19 09:43 |显示全部楼层
回复 56# smalloc


    在内核和应用层都没有了printf或者printk了。。。。这个我写的很清楚了吧。。。。
   都丢失的,无论我用了什么门限。。。。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-19 09:45 |显示全部楼层
回复 57# ljwilliam


    你55楼给我结论就是 根本没有过改善

另外我说改成1是出于对门限的理解:
当接受数据到这个门限时发中断. 即使中断没被处理仍然会继续受数据.直到数据被全读出.
所以门限应该只是用来改变中断发生频度的值

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-19 09:45 |显示全部楼层
回复  smalloc


    在内核和应用层都没有了printf或者printk了。。。。这个我写的很清楚了吧。。。。 ...
ljwilliam 发表于 2010-11-19 09:43



    也就是说问题根本没解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,8.5折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时8.5折扣期:2019年9月30日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP