完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`
嵌入式设计中使用 RTOS 必然会带来额外的 RAM 消耗,然而许多初次接触 RTOS 的工程师并不清楚如何评估 RAM的消耗量。这篇文档以 FreeRTOS 为例,介绍评估 RAM 使用情况的一般方法,并给出在 FreeRTOS 下优化 RAM 使用的方法,也由衷的期望读者在使用其他 RTOS 时,可以通过相似的思路来解决问题。 FreeRTOS 的组件包括调度器,内存管理单元及任务间通讯方法,当然还提供可选的软件定时器(事实上,多数 RTOS 提供的组件都是这几项)。因此对 RAM 的使用情况的评估也与这几项直接相关。内存管理单元提供内存管理办法,直接消耗内存的包括调度器,任务间通讯方法及软件定时器,当然每一个任务还需要一定的堆栈空间。在具体的应用中,使用的任务数量可能不同,每个任务的堆栈空间也可能不一样,任务间通讯的方式也可能不同,当然我们还要考虑到 MCU 得内核和编译器优化选项的 文中提供的信息是以 STM32F407(Cortex-M4 内核)为硬件,IAR 编译选项开到最高,FreeRTOS 采用最新的 v8.0.0 来进行测试的。基本情况呢我们慢慢来分析一下。 采用嵌入式系统中比较常见的抢占式内核 256bytes 左右。真的很小,当然与 IAR 的编译优化有关系。 一个任务的内存使用包括两个部分,任务控制块(Task Control Block,嗯,大名鼎鼎的 TCB)和任务堆栈空间。在任务控制块的结构体信息中包含很多预编译选项(预编译选项包括什么,我建议你阅读下源码),总体而言,毫无疑问的是你想要的越多,付出的也得越多。按最小配置情况来讲,任务控制块需要 64bytes(任务名这里设置为 4 个 bytes)。任务堆栈就是一个比较棘手的问题了,许多工程师一上来就分配 512bytes(⊙﹏⊙b 汗)。其实许多任务用不了这么多的。想想任务堆栈都需要存些什么东西?CPU 寄存器值,任务中局部变量,调用的函数参数和函数调用深度(使用迭代函数请慎重)。因此在进行任务堆栈分配时考虑到最糟糕情况就 3. 任务间通讯 4. 定时器 总结一下。见下表。 三. 优化方法: 1. 分析空闲 RAM FreeRTOS 提供了非常多的的方法来获得哪些 RAM 被分配了但是没有被使用。简单的阅读下代码注释马上就可以使用相关的函数了,都在 task.c 中。这个办法可以很好的降低任务堆栈所浪费的空间。 2. 在开发的后期对 FreeRTOS 进行尽可能小的配置 所有的任务都不会被阻塞你就可以删掉守护任务。 调试选项当然也应该关掉。 根据应用的情况,将最大优先级和最小堆栈量设置的尽可能小。 3. 如果这都不行,换更大 RAM 的器件吧,STM32 提供了最丰富的产品线。 想保存查询资料可下载附件哦。 `
FreeRTOS RAM使用情况及优化方法.pdf
(271.94 KB, 下载次数: 5
)
|
|
相关推荐
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12009 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:18 , Processed in 0.578853 second(s), Total 65, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号