历史上的今天
返回首页

历史上的今天

今天是:2025年04月19日(星期六)

2020年04月19日 | STM32单片机中,FreeRTOS RAM使用情况及优化方法

2020-04-19 来源:eefocus

一.写在前面的话:
嵌入式设计中使用 RTOS 必然会带来额外的 RAM 消耗,然而许多初次接触 RTOS 的工程师并不清楚 如何评估 RAM 的消耗量。这篇文档以 FreeRTOS 为例,介绍评估 RAM 使用情况的一般方法,并给出 在 FreeRTOS 下优化 RAM 使用的方法,也由衷的期望读者在使用其他 RTOS 时,可以通过相似的思 路来解决问题。

二.FREERTOS RAM 使用情况
FreeRTOS 的组件包括调度器,内存管理单元及任务间通讯方法,当然还提供可选的软件定时器(事 实上,多数 RTOS 提供的组件都是这几项)。因此对 RAM 的使用情况的评估也与这几项直接相关。内 存管理单元提供内存管理办法,直接消耗内存的包括调度器,任务间通讯方法及软件定时器,当然每 一个任务还需要一定的堆栈空间。在具体的应用中,使用的任务数量可能不同,每个任务的堆栈空间 也可能不一样,任务间通讯的方式也可能不同,当然我们还要考虑到MCU 得内核和编译器优化选项的 问题。但是,通过简单的估算,还是可以轻松的得到 RAM 使用情况的大体信息。


文中提供的信息是以 STM32F407(Cortex-M4 内核)为硬件,IAR 编译选项开到最高,FreeRTOS 采 用最新的 v8.0.0 来进行测试的。基本情况呢我们慢慢来分析一下。

1. 调度器
采用嵌入式系统中比较常见的抢占式内核 256bytes 左右。真的很小,当然与 IAR 的编译优化有关系。

2.任务
一个任务的内存使用包括两个部分,任务控制块(Task Control Block,嗯,大名鼎鼎的 TCB)和任务 堆栈空间。在任务控制块的结构体信息中包含很多预编译选项(预编译选项包括什么,我建议你阅读 下源码),总体而言,毫无疑问的是你想要的越多,付出的也得越多。按最小配置情况来讲,任务控 制块需要 64bytes(任务名这里设置为 4 个 bytes)。


任务堆栈就是一个比较棘手的问题了,许多工程师一上来就分配 512bytes(⊙﹏⊙b 汗)。其实许多 任务用不了这么多的。想想任务堆栈都需要存些什么东西?CPU 寄存器值,任务中局部变量,调用的 函数参数和函数调用深度(使用迭代函数请慎重)。因此在进行任务堆栈分配时考虑到最糟糕情况就好了,就是上面提到的信息全部得以保存即可。并不是每个任务都需要 512bytes 的。最后,分配的值对齐,也就是 128,256,512 等等。

3.任务间通讯
任务间通讯是 RTOS 提供的另一项重要机制,方法很多,信号量,队列,邮箱等(如果你不知道我说 的是什么,搜下邵贝贝吧 :-D)。在 FreeRTOS 中,所有的通讯机制都是基于队列,因此,在 FreeRTOS 中这一项的估算围绕队列就可以了。一个队列需要 74bytes(最小配置,预编译选项请阅读 源码)。另外,至关重要的是,队列可以存放简单的数据,比如一个变量(这就可以诞生信号量),当然也可以存放数组,指针什么的。数组需要的空间,指针指向内容所需要的空间是需要额外计算的。

4.定时器
RTOS 往往都提供了软件定时器,用起来还是不错的,个人感觉在消费类电子产品中使用软件定时器 更合适些。一个定时器 56bytes。就这些。
总结一下。见下表。

在产品评估阶段,参考这些信息进行一般的估计是可行的,当然还是要给自己留点 Margin 的。

三.优化方法:
1. 分析空闲 RAM
FreeRTOS 提供了非常多的的方法来获得哪些 RAM 被分配了但是没有被使用。简单的阅读下代码注释马上就可以使用相关的函数了,都在 task.c 中。这个办法可以很好的降低任务堆栈所浪费的空间。


2. 在开发的后期对 FreeRTOS 进行尽可能小的配置
• 所有的任务都不会被阻塞你就可以删掉守护任务。
• 调试选项当然也应该关掉。
• 根据应用的情况,将最大优先级和最小堆栈量设置的尽可能小。

3. 如果这都不行,换更大 RAM 的器件吧,STM32 提供了最丰富的产品线。

推荐阅读

史海拾趣

Emmoco公司的发展小趣事

在追求经济效益的同时,Emmoco也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Emmoco还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Emmoco的社会责任感,也为公司的长期发展奠定了坚实的基础。

Circuit Assembly公司的发展小趣事

Emmoco公司成立于XXXX年,由一群富有远见和创新精神的电子工程师创立。公司自创立之初就明确了以技术创新为核心的发展道路,专注于研发高性能的电子元器件和模块。经过初期的不懈努力,Emmoco成功推出了一系列具有竞争力的产品,为公司的后续发展奠定了坚实的基础。

Flambeau公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,Flambeau公司积极实施市场拓展战略。公司不仅在北美市场深耕细作,还逐步将业务拓展到欧洲、亚洲等国际市场。通过参加国际展会、建立海外销售渠道、与当地企业建立合作关系等方式,Flambeau成功地将自己的品牌和产品推向全球。同时,公司还注重品牌建设和客户服务,通过提供优质的售前咨询、售中支持和售后服务,赢得了广大客户的信赖和好评。

博众电气(BZCN)公司的发展小趣事

随着国内市场的日益饱和,博众电气开始将目光投向国际市场。公司制定了国际化发展战略,积极参与国际竞争与合作。通过在国外设立分支机构、参加国际展会等方式,博众电气成功打开了国际市场的大门。如今,公司的产品已经远销海外多个国家和地区,国际市场份额逐年攀升。

Dresden Elektronik公司的发展小趣事

在技术和产品的双重驱动下,Dresden Elektronik公司开始积极拓展市场。他们不仅在国内市场上取得了显著的成绩,还积极开拓国际市场。通过参加国际展会、与跨国企业合作等方式,公司的知名度和影响力逐渐提升,市场份额也不断扩大。

Highland Electronics Co Ltd公司的发展小趣事

在公司快速发展的过程中,High Tech Chips Inc深刻认识到单打独斗的局限性。因此,公司积极寻求与全球知名科技企业的战略合作。通过与华为、三星等手机制造商的合作,High Tech Chips Inc的芯片产品被广泛应用于这些企业的旗舰机型中,极大地提升了产品的知名度和市场占有率。同时,公司还与英伟达、英特尔等芯片巨头建立了技术合作关系,共同推动芯片技术的创新和发展。

问答坊 | AI 解惑

JZC-23F继电器

还有一个问题:这个继电器的用什么样的三极管来带动?上面有“10A/28VDC,5A/220VAC,DC5V“字样,怎样解释?它对吸合电流又没有要求?…

查看全部问答>

RS232 起始位 停止位 校验位 需要自己实现吗?

ModBus帧格式为:从机地址(1字节),功能码(1字节),起始地址(2字节),数据长度(2字节),CRC码(2字节) 然后数据传输方式规定为串行异步:1位起始位,8位数据位,1偶校验位,1位停止位。 我的疑问是: 1)CRC只对数据位进行校验,那就是 ...…

查看全部问答>

S3C44B0X板配什么LCD好?学习用的,价格一般

麻烦大家推荐一下,要是有卖的话直接卖给我吧,免得我东找西找,好辛苦~…

查看全部问答>

【求助】eVB读写文件时“语句未结束”?

源代码如下: Private Sub Form_Load()    Dim word, meaning As String        Open \"words.dat\" For Input Access Read As #1    Do While Not EOF(1)      Input #1, word ...…

查看全部问答>

【求助】有关无线通讯(实在没办法了)

我已经从21号弄到现在了,本来年前想弄一点效果出来,但这几天一直试却实在调不通,所以只好向大家求助了。 我计划做两块电路板之间的无线通讯,用的是149,通讯模块是prt2000。 电路版已做好,板内控制灯等元件都是灵的,但是两块板之间的控一直 ...…

查看全部问答>

【征文】51单片机从入门到……到刚入门

       嘿嘿,其实《51单片机从入门到精通》算是我的单片机启蒙书了,其实这个书名毫无新意,类似的简直是一抓一大把。但是我的经历告诉我,即便是再平凡的书,善加利用也会有很大帮助。就是这本在普通不过,甚至还有几处错误 ...…

查看全部问答>

综述嵌入式开发

 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,特别是随着消费家电的智能化,嵌入式更显重要。下面就由福州卓跃教育为大家做一个具体的介绍。        嵌入式系统是软硬结合的东西,福州嵌入式开 ...…

查看全部问答>

学模拟+PSRR和电源的关系

本帖最后由 dontium 于 2015-1-23 11:39 编辑 放大器具有高 PSRR,就不需担心电源变化? 链接deyisupport./blog/b/signalchain/archive/2013/12/16/psrr.aspx 本人模拟新手,看了这篇文章了解了PSRR和电源的关系,重点了解了规格书中写的DC PS是R ...…

查看全部问答>

52单片机T2的用法

众所周知,52单片机相比较51多了一个T2定时器,楼主最近搞的一个小车需要三个定时器,所以T2也派上了用场。貌似这个T2的资料比较少,我看了郭天祥老师的书里关于T2也讲了一些,可是不咋详细。关于T2定时器的程序我在网上找到了,经实验测试没有问题 ...…

查看全部问答>