嵌入式学习笔记 - FreeRTOS v9.0.0 与v10.0.1不同版本占用资源对比,以及TOTAL_HEAP_SIZE设置大小

article/2025/7/20 1:00:09

一 资源占用对比

以下为用示例对比freeRTOS v9.0.0版本以及v10.0.1版本占用资源的境况,两者均在运行完全相同的任务包括任务内容与数量的情况进行对比,任务的创建均使用静态内存方式创建,每个任务的任务堆栈均设置相同大小,并且freeRTOSconfig.h文件使用基本相同的配置。

下图为裸机状态下,未移植任何freeRTOS系统版本情况下,资源的占用情况:

 下图为使用cubeMX自带的freeRTOS,版本v10.0.1静态内存,运行的任务编译后如下:

下图为使用cubeMX自带的freeRTOS,版本v10.0.1动态内存configTOTAL_HEAP_SIZE 设置为20*1024,运行的任务编译后如下:

下图为用移植方式使用freeRTOS,版本v9.0.0静态内存,运行的任务编译后如下

下图为用移植方式使用freeRTOS,版本v9.0.0动态内存configTOTAL_HEAP_SIZE 设置为20*1024,运行的任务编译后如下

可见ROM占用为

裸机状态:     ROM:17460+396+ 40=17896byte=17k, RAM:40+1288=1328byte=1k

v10.0.1版本静态内存:ROM:20584+436+156=21176byte=20k,RAM:156+6388=6544byte=6k

v10.0.1版本动态内存:ROM:20856+436+160=21452byte=20k,RAM:160+22608=22768byte=22k

v9.0.0版本静态内存:  ROM:20520+396+144=21060byte=20k,RAM:144+4368=3936byte=3k

v9.0.0版本动态内存:  ROM:21256+396+148=21800byte=21k,RAM:148+23110=23248byte=22k

静态内存分配的情况下可以看出两者:

ROM占用方面基本一致,大小均为3kb左右,

RAM占用方面,10.0.1版本比9.0.0版本多出接近一倍,一个为5k,一个为2k,但是相比一般的片上硬件资源总体占用空间都很小。

动态内存分配的情况,因为TOTAL_HEAP_SIZE为了安全起见一般设置的比较大,所以会占用较大内存空间

二 freeRTOS TOTAL_HEAP_SIZE一般要设置为多大

FreeRTOS 中,任务堆栈主要用来存放任务函数的局部变量,大小根据任务局部变量的多少以及函数调用的深度(嵌套层数)合理选择,而freeRTOS若使用动态分配,动态创建任务时任务栈使用的是堆空间,所以TOTAL_HEAP_SIZE的大小要根据所有任务的栈的大小以及队列的大小加上一定的安全余量来设定。

见以下deepseek的回答:

FreeRTOS 中 configTOTAL_HEAP_SIZE 的设定没有固定值,需根据具体应用需求和硬件资源动态调整。结合搜索结果,关键考量因素如下:

📊 核心原则与计算方法

  1. 基础用途‌:该宏定义了 FreeRTOS 动态内存池的总大小,用于分配任务栈、队列、信号量等内核对象。
  2. 初始估算‌:
    • 建议初始值设为 ‌可用 RAM 的 50%-70%‌。
    • 计算公式‌:
       

      textCopy Code

      configTOTAL_HEAP_SIZE ≈ (任务数 × 任务栈大小) + (队列数 × 队列项大小 × 队列长度) + 其他内核对象开销 + 安全余量📏

    • 示例‌:若系统有 5 个任务(每个栈 256 字),2 个队列(每项 4 字节、长度 10),可估算为:
      (5 × 256 × 4) + (2 × 4 × 10) + 1024 ≈ 6144 字节,再预留 20%-30% 余量。

⚠️ 关键注意事项

  1. 避免内存冲突‌:
    • 若使用 FreeRTOS 的动态内存分配(如 heap_4.c),需 ‌将启动文件(如 startup_stm32xxx.s)中的 Heap_Size 设置为 0‌,否则系统堆与 FreeRTOS 堆可能重叠导致 HardFault。 ?                                                                                                   
  2. 动态监控与调整‌:
    • 通过 xPortGetFreeHeapSize() 实时监测剩余堆内存,调整后需保证长期运行后仍有 ‌≥30% 的余量‌。
    • 若任务创建失败或系统崩溃,优先检查堆溢出而非盲目增大 configTOTAL_HEAP_SIZE
  3. 栈单位一致性‌:
    • configTOTAL_HEAP_SIZE 单位为 ‌字节‌,而任务栈大小参数(如 xTaskCreate() 中的 usStackDepth)单位为 ‌字(4 字节)‌,需注意换算。

🔧 调试与优化建议

  • 逐步逼近法‌:初始设置为保守值(如 10KB),运行基础任务后监控剩余堆空间,逐步增加至稳定值。
  • 链接脚本辅助‌:结合 MCU 的链接脚本(.ld 文件)确认 RAM 分区,确保 FreeRTOS 堆未超出物理 RAM 边界。
  • 替代方案‌:对复杂应用,可考虑静态分配(configSUPPORT_STATIC_ALLOCATION=1)减少堆依赖。

💎 总结

初始值参考‌:一般设为 ‌6KB–24KB‌(根据任务复杂度)34,并通过运行时监控优化。‌关键步骤‌是关闭启动文件的标准堆(Heap_Size=0)并预留充足余量以防碎片。实际值需通过 xPortGetFreeHeapSize() 验证后最终确定。


http://www.hkcw.cn/article/sYykucZGlp.shtml

相关文章

装有87万元的行李箱赶高铁遗失 20分钟巨款物归原主

端午假期期间,深圳北站迎来客流高峰,单日发送和到达旅客突破50万人次。在这繁忙的出行场景中,一个装有87万元现金的行李箱与主人意外分离。5月31日9时41分,深圳北站派出所的两名公安干警在巡视候车室时发现了一个无人认领的白色行李箱,立即告知车站客运车间工作人员。工作…

day42python打卡

知识点回顾 1.回调函数 2.lambda函数 3.hook函数的模块钩子和张量钩子 4.Grad-CAM的示例 作业:理解下今天的代码即可 Grad-CAM 在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度。然而,标准的前向传播和反向传播过程通常是一个…

一纸规划让沉寂多年高庙村热闹起来 乡村焕发新生机

从空中俯瞰紧邻长寿湖的长寿区石堰镇高庙村,建设正如火如荼推进。5月21日,日上三竿,刚从地里摘完蔬菜的孔祥辉回到家里,发现92岁的婆婆没在屋里。“啊,没在!准是去湖边了。最近兴致高,天气这么大都要去。”孔祥辉不禁说道。孔祥辉是长寿区石堰镇高庙村村民,她口中的“湖…

中国女排世联赛北京站名单揭晓 阵容公布引发期待

北京时间6月2日,中国排球协会公布了中国女排参加世界联赛北京站的名单。主攻位置上,队伍选择了吴梦洁、庄宇珊、唐欣和董禹含;副攻则由王媛媛、万梓玥、单琳倩、陈厚羽以及王奥芊组成;接应方面,龚翔宇担任队长,杨舒茗和范泊宁也入选了名单;二传位置上是邹佳祺、殷小岚和…

北京一男子端午节独爬野山被困,还执意自己找路!27人连夜冒雨搜山 自信过度险酿祸

5月31日端午节,在北京房山一处野山中,一名男子登山迷路。他联系警方询问下山路,警方随即联动了房山蓝天救援队。晚上8点多,当救援队员试图获取更多信息时,该男子表示只想问路,并拒绝了救援队的帮助,坚持自己下山。尽管如此,为了确保他的安全,救援队还是启动了救援程序…

如何在 Windows 11 中添加环境变量

在 Windows 11 中,可以通过图形用户界面轻松设置环境变量 (env)。Windows 或其他操作系统需要环境变量来准确了解重要文件的存储位置。这些位置在每台计算机上可能会有所不同。对于大多数 Windows 用户而言,系统通常位于 C:\Windows\ 文件夹中,而应用程序则一般情况下默认是…

张家界溶洞垃圾已打捞2.7吨 排污事件引发关注

近日,有网友反映张家界市慈利县一处天然溶洞被人为排污,导致溶洞受到污染。相关话题引起了广泛关注。据慈利县融媒体中心6月1日发布的最新视频,经过7天的努力,清理打捞杨家坡溶洞垃圾2.7吨。相关视频显示,溶洞内的垃圾正在被装袋并使用吊机吊出,旁边已经堆放了大量袋装好…

美国卡车侧翻 2.5亿只蜜蜂“出逃” 养蜂人紧急救援

当地时间5月30日,美国西北部的华盛顿州发生了一起车祸。一辆卡车后的拖车侧翻,导致约2.5亿只蜜蜂飞出。有关部门随即发布通知,提醒公众提高警惕,小心被蜇。车祸发生后,附近的养蜂人纷纷赶往现场帮忙,收集从车上滚落的蜂箱并妥善安置。应急部门也封闭了该区域的多条道路,…

北京:男子端午节爬野山迷路,还执意自己找路!27人冒雨搜山救援 最终成功救出

5月31日端午节,在北京房山一处野山中,一名男子登山迷路,但他不想麻烦救援队,坚持要自己摸索下山。男子曾给警方打电话询问下山道路,警方随后联系了房山蓝天救援队。晚上8点多,当救援队员询问男子详细信息时,他却表示只想问问路,并拒绝了救援队员的帮助。尽管被困男子未…

曼联给加纳乔标价4000万英镑,球迷愤怒 全欧将嘲笑我们

曼联球迷在社交媒体上对俱乐部可能降价出售加纳乔表示质疑。据称,曼联最初为这位边锋标价5000万英镑,但随着那不勒斯的兴趣增加,实际售价可能降至4000万英镑。一位球迷在社交媒体上愤怒地表示,如果以4000万英镑的价格出售加纳乔,全欧洲都会嘲笑曼联。另一名球迷指出,其他…

ck-editor5的研究 (1):快速把 CKEditor5 集成到 nuxt 中

前言 最近有用到 CKEditor5, 有点头大,只能在业余时间研究一下了。一看他们的文档,结果发现有点难以理解(我阅读理解一直很差),看了许久,还是对他们的设计概念有点云里雾里的。为了不浪费时间,…

基于LLM的智能客服系统开发全流程:技术架构、落地挑战与行业实践

基于LLM的智能客服系统开发全流程:技术架构、落地挑战与行业实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 基于LLM的智能客服系统开发全流程:技术架构、落地挑战与行业实践摘要引言一…

俄版珍珠港事件?有人呼吁报复,“要比当年美国更甚” 乌无人机袭击引发紧张局势升级

就在俄乌定于6月2日举行第二轮直接谈判前夕,俄罗斯境内发生了一系列袭击事件。6月1日,俄罗斯境内五个空军基地遭遇大规模无人机袭击,乌克兰安全局宣称对此负责。这是乌军自俄乌冲突爆发以来对俄领土发动的最具渗透性的袭击之一。俄罗斯国防部认定这是一次“恐怖袭击”,并证…

东盟在中美之间是否已经选边站 东盟明确反对选边站队

2025年6月1日,新加坡香格里拉酒店内气氛紧张。第22届香格里拉对话会进入尾声,但中美之间的博弈仍在亚太地区持续发酵。前一天,美国国防部长赫格塞斯发表演讲,将这场国际安全论坛变成了中美战略交锋的战场。赫格塞斯在30分钟的演讲中,用超过三分之二的时间渲染“中国威胁”…

红色精灵闪电与普通闪电有何不同 高空舞者的秘密

董书畅在西藏山南按下快门的瞬间,捕捉到了一个转瞬即逝的红色精灵闪电,这组照片让网友们赞叹不已,也揭开了大气奇观——红色精灵闪电的神秘面纱。与常见的云地闪电不同,红色精灵闪电出现在30-90公里的高空。这种闪电的形成原理非常神奇,当强烈的云地闪电产生电磁脉冲时,会…

1-2 Dart SDK 安装

要使用 Dart 编程语言开发各种有趣的项目,我们首先需要安装 Dart SDK。Dart SDK 是预编译版本,无需手动编译,只需下载并解压即可使用。 本文将带你一步步完成 Dart SDK 在 Windows、Linux 和 macOS 平台上的安装过程。 💻 在 Wi…

曝印度航空正洽谈新增大型窄体客机 订单规模或达数百架

塔塔集团旗下的印度航空正与空客和波音就一项重大新飞机订单展开谈判,计划新增约200架单通道客机,以补充2023年的一笔巨额交易。这家前印度国有航空公司正推进数十亿美元的重组计划。消息人士透露,订单谈判可能涉及总计数百架不同机型的飞机,这是对此前报道的“追加一批大型…

张文宏受聘香港理工大学 荣誉教授新身份

5月28日,张文宏在香港理工大学的名师讲堂进行演讲。当天,香港理工大学聘请他为医疗科技及资讯学系的荣誉教授,由该校常务及学务副校长黄永德教授颁发聘书。张文宏是国际公认的传染病防控权威专家,长期致力于感染性疾病的临床诊疗及公共卫生防疫,现任复旦大学附属华山医院感…

山西小伙脖子被扎多根烧烤签 已脱离危险

6月2日凌晨2时许,有网友发帖称山西临汾一名小伙脖子上被扎了多根烧烤签。据网友发布的视频显示,这名小伙脖子上扎了四根金属签子,签上还有烧烤肉串。急救人员小心翼翼地将其带至病床。受伤小伙暂已脱离危险。发帖网友是一名参与此次急救的急救人员。他介绍,事发于凌晨零时前…

戚薇一家四口泰国被偶遇 幸福出游羡煞旁人

6月1日,有网友在泰国偶遇戚薇一家四口,看起来他们是为了庆祝端午节和儿童节而前往泰国。被发现时,戚薇戴着一顶黑色鸭舌帽,搭配墨镜,头发扎成低丸子头,正和女儿Lucky在商场玩具区选购玩具。从网友晒出的照片来看,戚薇和李承铉都穿着黑色服装,显得十分干练。40岁的戚薇戴…