![]() |
1
3
您可以考虑使用指向消息的指针队列,而不是消息本身的队列。这样,不管消息如何,队列中的每个项目都是固定大小(指针大小)。 这项技术需要仔细的资源管理,以确保在接收器完成消息处理之前,消息不会被修改、删除或重用。您需要一个分配队列出列释放机制。 例如,给定:
那么发送者可能有类似(伪代码)的东西:
接收器:
我尚未定义的分配/解除分配函数的详细信息。一个简单的方法是使用固定块内存池。如果您的RTO不提供这些,一个简单的实现是在池中有指向消息的指针队列,每个消息类型有一个队列/池。要分配,只需从相关消息池中获取一个指针,将消息从队列中取出,然后通过返回指向队列的指针来取消分配。 注意,有些RTO允许直接发送可变长度的消息——例如,在EMBOS中,您可以为队列分配内存池,并在发送时指定长度,而不是在创建队列时指定长度。但是,接收器必须能够接收最大可能的消息。 |
![]() |
2
4
Freertos文档与队列集一起讨论这个问题。(见 https://www.freertos.org/Pend-on-multiple-rtos-objects.html 在“使用队列集的替代方法”一节中)。 基本上,其思想是使用枚举来标识缓冲区中不同类型的消息。 对于缓冲区类型,可以使用枚举和结构联合的组合。
然后您可以按如下方式区分消息:
|
![]() |
taquionbcn · stm32l4 RTC HAL不工作 7 年前 |
![]() |
Logen Sand · 使用netconn同时处理多个LwIP连接 8 年前 |
|
Cantafford · FreeRTOS编译器[关闭] 8 年前 |
![]() |
Zhang Biao · 如何在FreeRTOS中使用互斥锁? 10 年前 |
![]() |
DevenJ · 从freeRTOS运行应用程序 11 年前 |