概要
本文写自正在做的项目,需要使用串口2处理EasyModBus传输的报文,原本采用中断处理的方式,在屏幕,按键,感应器同时传输下,产生了丢包现象,偶发性的死机问题,所以改用消息队列进行缓存,逐条处理。
整体流程
创建队列
串口中断接收报文,简易判别
添加入队列
解包任务,从队列中取出报文
解包做相应处理
具体实现
创建队列
结构体
#define QUEUE_LENGTH 20
struct CommData
{
uint8_t data[50];
uint8_t length;
};
struct CommQueue
{
uint8_t head;
uint8_t tail;
uint8_t isEmpty;
struct CommData data[QUEUE_LENGTH];
};
|