STM32内存结构介绍,FreeRTOS内存分配技巧,Stack_Size和Heap_Size大小设置

本文档探讨了STM32的内存结构,包括RAM和Flash的特性,以及data、bss、text等数据段。重点介绍了FreeRTOS中的堆和任务栈管理,解释了如何恰当分配FreeRTOS堆和任务栈空间,提到了内存分配API的使用,并分享了通过API监控内存使用情况来优化内存分配的方法。此外,还讨论了在实际应用中如何根据需求调整Stack_Size和Heap_Size,以确保资源的有效利用。

STM32内存结构介绍和FreeRTOS内存分配技巧

这是我第一次使用FreeRTOS构建STM32的项目,踩了好些坑,又发现了我缺乏对于操作系统的内存及其空间的分配的知识,故写下文档记录学习成果。

文章最后要解决的问题是,如何恰当地分配FreeRTOS中的堆、任务栈的空间。但是在概念的理解上,也需要知道STM32内存的相关知识。所以首先大致介绍一下STM32的内存结构。

STM32内存结构

STM32的数据在物理上分别储存在RAM和Flash中。RAM可读可写,掉电清零。Flash可读可写,但是读写时间很长,能掉电储存,并且一般空间比RAM大很多。

在关于如何使用RAM和Flash的问题上,STM32的内存又有了6个储存数据段和3种储存属性区的概念。

在这里插入图片描述

6个储存数据段

data

数据段,储存已初始化的,且初始化不为0的全局变量和静态变量。

bss

Block Started by Symbol。储存未初始化的,或初始化为0的全局变量和静态变量。

text

代码段,储存程序代码。

constdata

储存只读常量。

heap

堆,存放进程运行中被动态分配的内存段。其可用大小定义在启动文件startup_stm32fxx.s中,由程序员使用malloc()和free()函数进行分配和释放。

stack

栈,其大小定义在启动文件startup_stm32fxx.s中,由系统自动分配和释放。可存放局部变量、函数的参数和返回值,中断发生时能保存现场。但是static声明的局部静态变量不储存在栈中,而是放在data数据段。

3种储存属性区

RO(Read Only)

烧写到Flash中,可以长久保存。text代码段和constdata都属于RO。由于需要掉电储存,RO里也保存了一份data的数据。

</

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术在路上

帮助需要的人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值