嵌入式技术论坛
直播中

ss

6年用户 8762经验值
擅长:电源/新能源 制造/封装 RF/无线
私信 关注
[问答]

在消息列队中初始化时怎么知道发送消息的长度呢

问题:假设串口1接收了200个字节,串口接收完成后,通过消息列队把这200个数据发送给处理线程1,线程1怎么知道串口中断发过来的是200个字节的数据??
问题来源:发送消息的长度是变化的,接收消息怎么知道发送消息的长度??

已知条件:在消息列队中初始化时,消息列队内存池大小是2048字节,每个消息大小是256个字节,消息接收的长度是256个字节,消息发送的长度是200个字节;

已确定1:消息接收设置的长度,是预设的接收消息的最大长度,在这个长度之内的数据都能接收到;
已确定2:消息结构体内的长度也是设置的最大接收长度,不是实际传送的长度。

回帖(4)

ss

2022-3-24 09:27:59
如果针对串口,可以使用空闲中断。

对于更一般的情况,不考虑数依赖据帧之间的时间间隔可以考虑以下集中方式:

增加特殊字符做结束标志,如果是文本协议可以加入特殊符号,如rn等。如果传输的内容超出可以显示的文本字符范围,那就加入类似这样的字符。

2.如你所说,在数据帧的头部加负载长度信息,这要小心,一定不能错了。否则就麻烦了。

3.或者干脆像CAN等这些协议,让包长固定,这样处理起来方便,接收时间明确,可以做到实时性。这也是很多实时协议定长的原因吧。
举报

ss

2022-3-24 09:28:24
另外用邮箱、信号、参数等来传送消息发送的长度 ;

在需要发送消息,增加第一个字节,表示此消息的长度信息,然后接收程序根据这个长度来解码。
举报

ss

2022-3-24 09:28:31
我一般是这么做的,在发送给队列时,我一般定义一个结构体,结构体里包含了数组长度,数组,数据来来源等信息,线程收到后,就根据长度进行解析,如数据不完整的,等下一个数据包。
举报

ss

2022-3-24 09:28:37
设计成结构体 含有长度成员变量
举报

更多回帖

发帖
×
20
完善资料,
赚取积分