当前位置:  技术问答>linux和unix

串口接收丢失数据的问题

    来源: 互联网  发布时间:2016-03-17

    本文导语:  运行在arm-linux上的录像程序,同时要接收响应上位机的命令。  从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。  但是这样做就引起串口接收的问题,当接收一条70多个字节长度...

运行在arm-linux上的录像程序,同时要接收响应上位机的命令。 
从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。 
但是这样做就引起串口接收的问题,当接收一条70多个字节长度的上位机命令时,接收数据经常会丢几个字节,接收正确的概率大约是90%,后来经过问题排查,发现当注释掉从内存向sd卡拷贝数据的那条语句后就没有问题了。 
拷贝语句是:system("cp .....")
怀疑问题是由于当向sd卡拷贝文件的时候,会引起DMA中断,由于视频文件较大,经测试拷贝时间需要2秒左右,所以在此期间上位机发送的串口数据得不到中断响应引起的。 

请指点一下我得判断是不是正确?问题应该怎么解决?

|
当接收一条70多个字节长度的上位机命令时,接收数据经常会丢几个字节,接收正确的概率大约是90%,后来经过问题排查,发现当注释掉从内存向sd卡拷贝数据的那条语句后就没有问题了。  

你说的丢是指的没有接收到还是接收错误?

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

windows中,中断是分优先级的,由中断控制器控制,操作系统管理。但是linux好像并不要求硬件中断分优先级,而是将中断管理分为快速中断处理程序和慢速处理程序两部分处理的,慢速处理程序由cpu调度程序调度管理,快速中断处理部分遵循先来先处理的原则处理。具体不太清楚,以前看过记得一点。 

应该不是这个原因。如故还怀疑,那就自己测试一下就是了,使用串口和arm机通讯,通过控制台往sd卡上拷贝数据,看串口通讯是否出错。

简单的作法就是让上位机重发指令.
还有就是自己写拷贝函数,在拷贝过程中加usleep,让出一不分时间来.


|
1.不明白为什么向sd卡拷贝的时候一定要 system调用cp命令的。
2.串口接收数据的缓冲区是有限制的,要立即响应,看看你的串口进程是不是分配不到cpu,导致没有及时处理。

|
所以要把整个拷贝动作分段进行。
每拷贝一点就检查下,是否在接收指令,不是在进行中的话,就继续下一阶段拷贝动作。

|
1、使用 nice 系统命令 或者 nice函数调用,将串口处理的进程优先级提高到-20,对性能有一定影响。
2、有必要的话,检测一下程序中关于串口设置的参数,详情参见:http://blog.csdn.net/qdhuxp/archive/2006/08/09/1041669.aspx

    
 
 

您可能感兴趣的文章:

  • 串口通讯 丢失数据
  • 串口接收数据丢失,怀疑是中断引起的,请指教
  • 分块从串口发送图片数据,总是丢失部分数据,救命~急!急!急!急 (100分)在线等
  • 关于串口数据读取丢失问题
  • ubunut串口通信read底层传上来的数据时发生数据丢失。
  • Arm,Linux串口数据丢失的问题
  • 关于串口接收的问题,一直很疑惑……
  • linux下多串口卡接收数据不全
  • Linux 串口发送接收数据问题
  • 急,为什么串口接收一个0x0d的数据却显示为0x0A
  • linux 下清空串口发送接收缓冲区的函数.
  • 100分求linux下串口调试工具,要可以发送、接收十六进制
  • 求帮忙解决在linux下usb转为串口用来接收和发送数据给M0单板的一个问题 !!!!
  • linux串口无法接收数据(linunx新手求救)
  • 串口接收程序运行环境由windows改为linux后是否有大小端问题?
  • 由于问题变化了,所以重新个贴子,是关于线程间函数调用及串口接收数据的问题?
  • 想找一个从终端设备以串口接收数据然后在ARM(linux内核)板上做一个透明转发以UDP型式发送到一台PC机上程序的人员。有意详读下文!
  • 串口接收数据有时会阻塞
  • linux和windows串口问题!?linux向windows端发送,第一次write正常,继续write,windows接收到的就变成乱码了,这是什么原因??????
  • 串口发送数据 网口接收数据 发送一个10个字节数组接收不到
  • sos,为什么我在虚拟机下用linux串口接收到的数据最高位为0?
  • 急!!串口接收程序占有大量CPU,各位帮忙,来者有分!!!
  • 急!(ARM9开发板)select+read,串口一次无法读出一个完整的接收到的数据帧内容.
  • 急问!!!UART串口通信,可发送数据,不能接收数据
  • 『高分』如何实现串口发送数据同时处理接收数据(C/C++)
  • 串口通信 有时得到正确的值,有时又接收不到,为什么?谢了!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 散分100,求解串口键盘和串口鼠标驱动
  • Linux 中用java语言写串口程序,提示找不到串口
  • 高分求助:我笔记本没有串口,在linux下要和一个串口设备连,怎么办?
  • 关于linux串口通信中写串口的问题
  • 开发板串口与实际内核中的串口文件的对应关系怎么回事?谢谢帮忙
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • 工控机有6个串口,但用光盘安装debian6.05,在dev中只找到4个串口,如何解决。
  • linux下串口发送数据用串口精灵接受不到或为全零
  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • 要加多个串口,怎么分别指定他们的driver_name和dev_name以示区别各个串口?
  • 工控机上用光盘安装debian6.05,硬件上有6个串口,但是软件上即dev中只有4个串口,如何解决。
  • 嵌入式linux,串口初始化时,无法设置串口属性
  • 扩展的串口卡上的串口操作的问题
  • 请教串口通信的编程
  • 请问如何以独占的方式打开串口
  • linux串口驱动该怎么写
  • 虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点
  • linux下如何清空串口的输入输出缓存


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3