目前在做高频数据采集分析,使用串口设备驱动(使用rs485),开启DMA+空闲中断,接收不定长数据,接收方式一对多,(即一个485接收4个设备的数据发送)。
发送频率较快(触发式发送);
数据最长的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048;
问题:
自己查看认为:串口设备驱动中的fifo不是环形buf,调用rt_serial_read();
并没有把buf中的字节取出,buf依旧一直存,直到长度为DMA的设置size,标记初始为0,
从头来过;个人认为fifo目前的设计问题太大,接收数据不为整数倍的长度就很容易出现问题。
建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。
再者其实串口在 RT-Threa …
表达的可能不是很清楚,使用空闲中断+串口字符设备的读回调,默认回调读到的数据就是一个完整的包,或者换个思路,回调后的数据不加判断,全存到消息队列,在处理的时候一个一个字符读取,再判断
你要的功能恰好我有实现,给你做个参考吧。我在公司的STM32F429平台上有实际使用过。
谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后续判断和处理,