一些OS的消息队列是传递的数据地址,还有一些OS消息队列是数据复制粘贴。
比如RTX5的消息队列就是数据的复制粘贴,这种的如果数据量比较大,比如几KB的数据,发送任务复制一次,接收任务粘贴一次,效率太低。
干脆改成了,申请一个动态内存,传递动态内存地址过去。
[C] 纯文本查看 复制代码 osMemoryPoolId_t mpid_MemPool; // memory pool id
MEM_BLOCK_t *pMemDapSend;
MEM_BLOCK_t *pMemDapReceive;
osMessageQueueId_t mid_MsgQueueSend; // message queue id
osMessageQueueId_t mid_MsgQueueReceive; // message queue id
mpid_MemPool = osMemoryPoolNew(MEMPOOL_OBJECTS, // count
sizeof(MEM_BLOCK_t), // size
NULL); // attr
pMemDapSend = (MEM_BLOCK_t *)osMemoryPoolAlloc(mpid_MemPool, 0U);
pMemDapReceive = (MEM_BLOCK_t *)osMemoryPoolAlloc(mpid_MemPool, 0U);
mid_MsgQueueSend = osMessageQueueNew(20, sizeof(uint32_t), NULL);
mid_MsgQueueReceive = osMessageQueueNew(20, sizeof(uint32_t), NULL);
|