[STM32F1] osMessagePut函数

[复制链接]
1848|34
dengdc 发表于 2023-2-3 22:40 | 显示全部楼层
自己写一个程序 分装一个字节一个字节的发送
renyaq 发表于 2023-2-3 22:41 | 显示全部楼层
指针的操作要非常的小心
SantaBunny 发表于 2023-2-12 10:40 | 显示全部楼层
是指针的话就没有问题的
公羊子丹 发表于 2025-4-6 07:36 | 显示全部楼层
是的,这个函数确实只能传递 32 位数据,一般我们都用它来传指针,实际数据放在堆里或全局区。
周半梅 发表于 2025-4-6 07:37 | 显示全部楼层
你可以把结构体放到静态内存中,然后传它的地址,info 就变成 uint32_t ptr = (uint32_t)&myStruct,这样就绕过了大小限制。
帛灿灿 发表于 2025-4-6 07:39 | 显示全部楼层
这也是 CMSIS RTOS API 的一个“统一封装”产物,功能简单但限制多,不如原生 FreeRTOS 的 xQueueSend 灵活。
童雨竹 发表于 2025-4-6 07:40 | 显示全部楼层
如果你只是传个 ID、状态之类的小数据,osMessagePut 用着挺方便,但复杂数据就不太够用了。
万图 发表于 2025-4-6 07:41 | 显示全部楼层
你可以考虑用 osMailAlloc 和 osMailPut,这个机制是专门设计来传结构体和大数据的,比 osMessage 更适合你这种情况。
Wordsworth 发表于 2025-4-6 07:43 | 显示全部楼层
本质上 osMessagePut 是个“值传递”的消息队列,如果你想“引用传递”,就得用指针打包成 uint32_t 传进去。
Bblythe 发表于 2025-4-6 07:44 | 显示全部楼层
当初我也是看到 uint32_t info 一脸懵,后来查了 ST 的例程才知道人家全都是传指针。
Pulitzer 发表于 2025-4-6 07:45 | 显示全部楼层
其实用结构体也不是不能传,只是你得自己管理好它的生命周期,不能传个局部变量地址就放进去,那样会崩。
Uriah 发表于 2025-4-6 07:47 | 显示全部楼层
CMSIS-RTOS 对 FreeRTOS 封装完之后有点像“功能缩水版”,功能统一了但灵活性牺牲了不少。
Clyde011 发表于 2025-4-6 07:48 | 显示全部楼层
如果你对任务间通信要求高,不如直接用 xQueueCreate 和 xQueueSend,虽然不是 CMSIS 标准,但更自由!
星闪动力 发表于 2025-4-7 14:52 | 显示全部楼层
动态分配内存是好的,但要检查内存是否成功分配,防止发送失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部