目前在做高频数据采集分析,使用串口设备驱动(使用rs485),开启DMA+空闲中断,接收不定长数据,接收方式一对多,(即一个485接收4个设备的数据发送)。
发送频率较快(触发式发送);
数据最长的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048;
问题:
- 1、数据接收存在粘包现象,一包数据包含两包;
- 2、大数据包出现断包现象,从未收到完整包;
自己查看认为:串口设备驱动中的fifo不是环形buf,调用rt_serial_read();并没有把buf中的字节取出,buf依旧一直存,直到长度为DMA的设置size,标记初始为0,
从头来过;个人认为fifo目前的设计问题太大,接收数据不为整数倍的长度就很容易出现问题。