硬汉嵌入式论坛

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

[RTOS] RTX5与Freertos的消息队列内存占用为什么这么大

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2022-11-28 22:22:43 | 显示全部楼层 |阅读模式
同样创建1024个uint_8的队列,rtx5要占用16*1024 freertos只需要1024,为什么相差这么大呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-11-29 00:10:41 | 显示全部楼层
RTX5的内存管理玩法很多,估计你用的是内存对象管理玩法,这种用法的话,是有个总的占用大小的,你说的16K估计是总的大小,这个大小下可以创建多个消息队列。

方便的话,你可以分享你的工程模板到百度云,我看下。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2022-11-29 10:26:14 来自手机 | 显示全部楼层
是动态管理的,attr填的null,工程随后附上
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2022-11-29 12:22:00 | 显示全部楼层
image.png image.png

TEST.zip

6.3 KB, 下载次数: 3

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-11-29 13:26:41 | 显示全部楼层

帮你看了下源码,确实是这样的,原因是RTX5搞了一个骚操作,支持了一个每个消息都可以设置优先级的功能,要支持这个功能,每个消息都要支持一个链表。

所以才这么大。
[C] 纯文本查看 复制代码
  block_size = ((msg_size + 3U) & ~3UL) + sizeof(os_message_t);
  size       = msg_count * block_size;

/// Message Control Block
typedef struct osRtxMessage_s {
  uint8_t                          id;  ///< Object Identifier
  uint8_t              reserved_state;  ///< Object State (not used)
  uint8_t                       flags;  ///< Object Flags
  uint8_t                    priority;  ///< Message Priority
  struct osRtxMessage_s         *prev;  ///< Pointer to previous Message
  struct osRtxMessage_s         *next;  ///< Pointer to next Message
} osRtxMessage_t;




回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2022-11-29 13:40:06 | 显示全部楼层
eric2013 发表于 2022-11-29 13:26
帮你看了下源码,确实是这样的,原因是RTX5搞了一个骚操作,支持了一个每个消息都可以设置优先级的功能, ...

多谢硬汉哥,本来想的是用消息队列结合CMSIS-DRIVE里的USART驱动来实现uart循环接收,现在看来还是ringbuff更节省资源了
现在遇到个问题,USART驱动每次接收总是自己关闭接收中断,我原本的想法是在USART驱动回调里的空闲标志里重启接受,但是在大量小包数据测试中,空闲中断有丢包的迹象,而且不低
完全没有直接在中断里放入ringbuff里来的效率高,还不丢包
硬汉哥有没有什么好办法,用上CMSIS-DRIVE里的USART驱动,顺便把环形接收也搞上,不漏过一个字节
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-11-30 10:23:13 | 显示全部楼层
unqaq 发表于 2022-11-29 13:40
多谢硬汉哥,本来想的是用消息队列结合CMSIS-DRIVE里的USART驱动来实现uart循环接收,现在看来还是ringbu ...

H7的CMSIS-Driver驱动设计的不好,官方有点偷懒,参考F4的改下吧,这个做的好。

基于V6的CMSIS-Driver串口应用,支持8串口DMA不定长收发,比CubeMX还要省事
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93714
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 06:06 , Processed in 0.179492 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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