发新帖我要提问
12
返回列表
打印
[STM32F1]

osMessagePut函数

[复制链接]
楼主: chenjunt
手机看帖
扫描二维码
随时随地手机跟帖
21
dengdc| | 2023-2-3 22:40 | 只看该作者 回帖奖励 |倒序浏览
自己写一个程序 分装一个字节一个字节的发送

使用特权

评论回复
22
renyaq| | 2023-2-3 22:41 | 只看该作者
指针的操作要非常的小心

使用特权

评论回复
23
SantaBunny| | 2023-2-12 10:40 | 只看该作者
是指针的话就没有问题的

使用特权

评论回复
24
公羊子丹| | 2025-4-6 07:36 | 只看该作者
是的,这个函数确实只能传递 32 位数据,一般我们都用它来传指针,实际数据放在堆里或全局区。

使用特权

评论回复
25
周半梅| | 2025-4-6 07:37 | 只看该作者
你可以把结构体放到静态内存中,然后传它的地址,info 就变成 uint32_t ptr = (uint32_t)&myStruct,这样就绕过了大小限制。

使用特权

评论回复
26
帛灿灿| | 2025-4-6 07:39 | 只看该作者
这也是 CMSIS RTOS API 的一个“统一封装”产物,功能简单但限制多,不如原生 FreeRTOS 的 xQueueSend 灵活。

使用特权

评论回复
27
童雨竹| | 2025-4-6 07:40 | 只看该作者
如果你只是传个 ID、状态之类的小数据,osMessagePut 用着挺方便,但复杂数据就不太够用了。

使用特权

评论回复
28
万图| | 2025-4-6 07:41 | 只看该作者
你可以考虑用 osMailAlloc 和 osMailPut,这个机制是专门设计来传结构体和大数据的,比 osMessage 更适合你这种情况。

使用特权

评论回复
29
Wordsworth| | 2025-4-6 07:43 | 只看该作者
本质上 osMessagePut 是个“值传递”的消息队列,如果你想“引用传递”,就得用指针打包成 uint32_t 传进去。

使用特权

评论回复
30
Bblythe| | 2025-4-6 07:44 | 只看该作者
当初我也是看到 uint32_t info 一脸懵,后来查了 ST 的例程才知道人家全都是传指针。

使用特权

评论回复
31
Pulitzer| | 2025-4-6 07:45 | 只看该作者
其实用结构体也不是不能传,只是你得自己管理好它的生命周期,不能传个局部变量地址就放进去,那样会崩。

使用特权

评论回复
32
Uriah| | 2025-4-6 07:47 | 只看该作者
CMSIS-RTOS 对 FreeRTOS 封装完之后有点像“功能缩水版”,功能统一了但灵活性牺牲了不少。

使用特权

评论回复
33
Clyde011| | 2025-4-6 07:48 | 只看该作者
如果你对任务间通信要求高,不如直接用 xQueueCreate 和 xQueueSend,虽然不是 CMSIS 标准,但更自由!

使用特权

评论回复
34
星闪动力| | 2025-4-7 14:52 | 只看该作者
动态分配内存是好的,但要检查内存是否成功分配,防止发送失败。

使用特权

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

本版积分规则