OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2971|回复: 4

怎样求消息队列的某条数据的长度?

[复制链接]

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
发表于 2016-9-7 09:34:21 | 显示全部楼层 |阅读模式
本帖最后由 zhp 于 2016-9-7 10:38 编辑

看了原子哥的F4开发板的  “实验58 UCOSII实验3-消息队列、信号量集和软件定时器” 例程里面有求消息队列的大小 (OS_Q*)(q_msg->OSEventPtr))->OSQEntries但有时候我们
想知道收到的某条消息的具体长度,该怎么做?比如,我事先准备了10条消息队列内存,每条消息队列最大给分配的长度为100个字节,每次
实际发送的长度为0~100,那么接收端怎么得到每次实际发送数据的长度?  求助版主@zuozhongkai



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-9-7 11:49:37 | 显示全部楼层
我记得貌似函数返回值还是函数参数什么的就是消息长度,我电脑挂了,插不了资料了。你看一下接受数据的API函数
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
 楼主| 发表于 2016-9-7 12:44:37 | 显示全部楼层
本帖最后由 zhp 于 2016-9-7 12:51 编辑
zuozhongkai 发表于 2016-9-7 11:49
我记得貌似函数返回值还是函数参数什么的就是消息长度,我电脑挂了,插不了资料了。你看一下接受数据的API ...

接收函数是这样的
void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
它返回接收消息的地址,但没有所接收消息的长度,现在需要用接收消息的长度,不知道该怎么做?
如果实在不行,我想的是,自己封装一个协议,比如, 帧头 ,数据长度, 数据,帧尾
0xA5, 0x12,0x34, xxxxxx, 0x5A
让发送方把消息长度包含在消息里,接收方解析时,自己去计算长度,不过稍显得麻烦,
不知道有没有哪里本身就带有消息的长度的?
回复 支持 反对

使用道具 举报

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
发表于 2016-9-16 11:02:02 | 显示全部楼层
zhp 发表于 2016-9-7 12:44
接收函数是这样的
void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
它返回接收消息的 ...

你应该看一下UCOSIII,叫II而言,III 强大了一大截,我刚才实验了一下,
key=OSQPend((OS_Q*                        )&KEY_Msg,   
                                        (OS_TICK                )0,
                    (OS_OPT                        )OS_OPT_PEND_BLOCKING,
                    (OS_MSG_SIZE*        )&size,               
                    (CPU_TS*                )0,
                    (OS_ERR*                )&err);
这个函数中的size就是消息的字节数,很好用;嗯
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2013-11-22
在线时间
130 小时
 楼主| 发表于 2016-9-18 15:01:15 | 显示全部楼层
未来,我来 发表于 2016-9-16 11:02
你应该看一下UCOSIII,叫II而言,III 强大了一大截,我刚才实验了一下,
key=OSQPend((OS_Q*                        )&KEY_Ms ...

谢谢你,我该了解UCOSIII了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 22:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表