串口接收数据丢失,怀疑是中断引起的,请指教

chenccq 2008-05-06 04:55:43
运行在arm-linux上的录像程序,同时要接收响应上位机的命令。
录像文件放置在sd卡上。从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。
但是这样做就引起串口接收的问题,当接收一条70多个字节长度的上位机命令时,接收数据经常会丢几个字节,接收正确的概率大约是90%,后来经过问题排查,发现当注释掉从内存向sd卡拷贝数据的那条语句后就没有问题了。

怀疑问题是由于当向sd卡拷贝文件的时候,会引起DMA中断,由于视频文件较大,经测试拷贝时间需要2秒左右,所以在此期间上位机发送的串口数据得不到中断响应引起的。

请指点一下我得判断是不是正确?问题应该怎么解决?
...全文
636 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenccq 2008-05-13
  • 打赏
  • 举报
回复
重写了copy函数,问题依然存在;

降低拷贝速度,仍然不能解决问题;

经仔细观察,发现当调用sync()函数,或者系统自动调用sync()函数时,串口就丢数据;

上位机有错误重传和超时重传机制,用户使用不成问题,就是单板验收通不过;

问题应该是DMA中断与串口中断冲突引起的。由于arm芯片厂家的配置是非标准的,所以解决问题的办法要从系统配置上着手,目前正在研究,有进展了再告诉大家。这个问题在电脑上运行可能不会存在。
zj888 2008-05-09
  • 打赏
  • 举报
回复
上位机命令可以不用即响应吧?下位机检测到出错可以要求上位机重传命令,或上位机收到不响应可以重发命令,机制可以简单,硬件不足软软件补。
zhangxichao 2008-05-08
  • 打赏
  • 举报
回复
除了提高优先级,关注其它方法
air_snake 2008-05-08
  • 打赏
  • 举报
回复
不要使用system(cp..),对同一数据要加锁。而且你的串口要立即响应,不然丢数据
chenccq 2008-05-07
  • 打赏
  • 举报
回复
串口中断优先级可以设置吗?提高串口中断优先级是不是可以解决?
chenccq 2008-05-07
  • 打赏
  • 举报
回复
没有加锁,拷贝文件用的是system(cp。。。)函数。
xianfengdesign 2008-05-06
  • 打赏
  • 举报
回复
有没有加锁?

4,438

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧