打印
[开发工具]

osMessagePut函数

[复制链接]
1516|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenjunt|  楼主 | 2020-12-15 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

STM32CUBE提供的Free RTOS操作系统,经CMSIS的封装,向一个消息队列发送消息的函数变为osMessagePut,其函数的声明为:osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);
其中info是消息的内容,而它类型竟然是uint32_t,而不是一个指针!这岂不是意味着不能发送长度大于4字节的结构体类型的消息吗?

使用特权

评论回复
沙发
zhuhuis| | 2020-12-15 19:30 | 只看该作者
是不是可以把结构体的地址作为消息的内容发过去呢?

使用特权

评论回复
板凳
chenjunt|  楼主 | 2020-12-15 19:36 | 只看该作者
可我看了osMessagePut函数的代码后,发现不对头:该函数最终还是要调用xQueueSend函数的,其代码是:xQueueSend(queue_id, &info, ticks),它把info的地址传过去。

使用特权

评论回复
地板
chenjunt|  楼主 | 2020-12-15 19:39 | 只看该作者
要是一个任务两次调用osMessagePut函数发送消息,第一次时,给结构体变量赋值,然后调用osMessagePut函数将结构体的地址发送出去,osMessagePut函数再调用xQueueSend函数,将放置结构体地址的变量的地址发送出去;第二次时,准备再次调用osMessagePut函数发送消息,于是就给结构体变量赋以一个新的值。
假设此时,这样的话,再接收第一个消息,虽然可以根据消息的内容找到结构体,可这时结构体的内容已经改变了,岂不是出问题了!

使用特权

评论回复
5
zhuhuis| | 2020-12-15 19:42 | 只看该作者
看看这个函数的头文件,里面怎么注释的

使用特权

评论回复
6
chenjunt|  楼主 | 2020-12-15 19:46 | 只看该作者
没啥注释呀,就是说这个函数用于发送消息,第一个参数是消息队列的句柄,第二个参数是消息的内容,第三个参数是超时时间,函数返回状态。这些信息不足以消除疑问呀。

使用特权

评论回复
7
songqian17| | 2020-12-15 19:50 | 只看该作者
osMessagePut  函数的功能限定了只能传递一个32位的变量(指针),如果想解决楼主说的问题,用动态分配内存的方式可以解决。

使用特权

评论回复
8
songqian17| | 2020-12-15 19:57 | 只看该作者
每次发送前动态分配一块结构体内存,然后对其进行赋值,之后发送,第二次再申请一块新的内存,然后发送

使用特权

评论回复
9
songqian17| | 2020-12-15 20:00 | 只看该作者
这样就可以保证值不被改变,但是接收到消息后一定要对该内存释放。

使用特权

评论回复
10
chenho| | 2020-12-15 20:04 | 只看该作者
其实RTOS的原函数是可以传递多字节的,也可以调用原函数来传递多字节。

使用特权

评论回复
11
wangzsa| | 2020-12-15 20:11 | 只看该作者
这个函数的原型肯定有注释,编译后找到定义

使用特权

评论回复
12
happy_10| | 2020-12-15 20:15 | 只看该作者
因该不是这个意思

使用特权

评论回复
13
tian111| | 2020-12-15 20:22 | 只看该作者
仔细看清楚是怎么用的,应该不会这么限制。

使用特权

评论回复
14
juventus9554| | 2020-12-15 20:26 | 只看该作者

如果是指针的话就没有问题

使用特权

评论回复
15
pengf| | 2020-12-15 20:29 | 只看该作者
可以在函数里用指针指向他啊  应该是可以的

使用特权

评论回复
16
chenjunt|  楼主 | 2020-12-15 20:32 | 只看该作者

搞定了,呵呵,犯了低级错误……

使用特权

评论回复
17
cr315| | 2020-12-16 10:52 | 只看该作者
哈哈,楼主细节决定成败啊

使用特权

评论回复
18
自己的灌饼| | 2020-12-16 16:37 | 只看该作者
RTOS没有问题吧。

使用特权

评论回复
19
木木guainv| | 2021-1-9 22:02 | 只看该作者
感觉追踪到最后 无论什么包装都是一个字节一个字节的发送

使用特权

评论回复
20
磨砂| | 2021-1-9 22:03 | 只看该作者
楼主到底犯了什么低级错误啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

7868

帖子

5

粉丝