硬汉嵌入式论坛

 找回密码
 立即注册
查看: 572|回复: 8
收起左侧

[RTOS] 大数据量多任务同步,还是得使用消息队列传递地址,传递数据太慢了

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 2025-11-6 10:09:51 | 显示全部楼层 |阅读模式



一些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);



评分

参与人数 1金币 +1 收起 理由
qq1272221293 + 1

查看全部评分

回复

使用道具 举报

5

主题

75

回帖

90

积分

初级会员

积分
90
发表于 2025-11-6 16:18:33 | 显示全部楼层
我用ThreadX也是这样搞的.
回复

使用道具 举报

12

主题

43

回帖

79

积分

初级会员

积分
79
发表于 3 天前 | 显示全部楼层
FreeRTOS中有类似的API吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
 楼主| 发表于 3 天前 | 显示全部楼层
Alo9611 发表于 2025-11-18 10:27
FreeRTOS中有类似的API吗?

也可以的,使用FreeRTOS的动图内存申请和释放API。
回复

使用道具 举报

7

主题

167

回帖

188

积分

初级会员

积分
188
发表于 3 天前 | 显示全部楼层
既然都是地址了,干脆全局变量 或是extern 还发什么消息。有时候写习惯了OS了,本来单机 裸跑 明知道这个地址和变量,为了任务而任务 再发一条消息,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
 楼主| 发表于 3 天前 | 显示全部楼层
mygod 发表于 2025-11-18 11:36
既然都是地址了,干脆全局变量 或是extern 还发什么消息。有时候写习惯了OS了,本来单机 裸跑 明知道这个地 ...

单纯的使用可以,需要同步的场景下不行。

比如DMA双缓冲,完成一个缓冲立即通知任务执行
回复

使用道具 举报

12

主题

43

回帖

79

积分

初级会员

积分
79
发表于 3 天前 | 显示全部楼层
eric2013 发表于 2025-11-18 10:52
也可以的,使用FreeRTOS的动图内存申请和释放API。

可能我没表述清楚,我的意思是FreeRTOS也有类似的内存池操作函数吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
 楼主| 发表于 前天 09:38 | 显示全部楼层
Alo9611 发表于 2025-11-18 18:45
可能我没表述清楚,我的意思是FreeRTOS也有类似的内存池操作函数吗?

可以调用heap_4.c里面的动态内存申请和释放API
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 13 小时前 | 显示全部楼层
it's nice                                 
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 22:26 , Processed in 0.047766 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表