当前位置: 技术问答>linux和unix
串口接收数据丢失,怀疑是中断引起的,请指教
来源: 互联网 发布时间:2016-03-18
本文导语: 运行在arm-linux上的录像程序,同时要接收响应上位机的命令。 录像文件放置在sd卡上。从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。 但是这样做就引起串口接收的问题,当接...
运行在arm-linux上的录像程序,同时要接收响应上位机的命令。
录像文件放置在sd卡上。从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。
但是这样做就引起串口接收的问题,当接收一条70多个字节长度的上位机命令时,接收数据经常会丢几个字节,接收正确的概率大约是90%,后来经过问题排查,发现当注释掉从内存向sd卡拷贝数据的那条语句后就没有问题了。
怀疑问题是由于当向sd卡拷贝文件的时候,会引起DMA中断,由于视频文件较大,经测试拷贝时间需要2秒左右,所以在此期间上位机发送的串口数据得不到中断响应引起的。
请指点一下我得判断是不是正确?问题应该怎么解决?
录像文件放置在sd卡上。从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。
但是这样做就引起串口接收的问题,当接收一条70多个字节长度的上位机命令时,接收数据经常会丢几个字节,接收正确的概率大约是90%,后来经过问题排查,发现当注释掉从内存向sd卡拷贝数据的那条语句后就没有问题了。
怀疑问题是由于当向sd卡拷贝文件的时候,会引起DMA中断,由于视频文件较大,经测试拷贝时间需要2秒左右,所以在此期间上位机发送的串口数据得不到中断响应引起的。
请指点一下我得判断是不是正确?问题应该怎么解决?
|
不要使用system(cp..),对同一数据要加锁。而且你的串口要立即响应,不然丢数据
|
有没有加锁?