STM中FLASH和RAM的关系

本文详细探讨了STM32中的内存分布,包括FLASH和RAM的关系。介绍了C语言段的划分,如Code、RO-data、RW-data和ZI-data,并指出Flash等于Code加RO Data加RW Data,RAM则包含RW-data和ZI-data。同时,文章讨论了堆栈设置及其对程序运行的影响,强调了过度使用局部变量可能导致的崩溃风险。通过查看编译生成的.map文件,可以深入了解STM32的内存使用情况。
摘要由CSDN通过智能技术生成

一、STM32中的内存分布情况
要搞清楚stm32 FLASH、RAM的使用情况,就需要理清楚stm32的存储结构。
在stm32中,flash,SRAM寄存器和输入输出端口被组织在同一个线性地址空间内
C语言上分为栈、堆、bss、data、code段。重点分析一下STM32以及在MDK里面段的划分。
MDK下Code,RO-data,RW-data,ZI-data这几个段:
在这里插入图片描述
Code是存储程序代码的。
RO-data是存储const常量和指令。(read-Only-data)
RW-data是存储初始化值不为0的全局变量。(Read-Write-data)
ZI-data是存储未初始化的全局变量或初始化值为0的全局变量。(Zero-Initialize-data)
Flash=Code + RO Data + RW Data;
RAM= RW-data+ZI-data;
这个是MDK编译之后能够得到的每个段的大小,也就能得到占用相应的FLASH和RAM的大小,但是还有两个数据段也会占用RAM,但是是在程序运行的时候,才会占用,那就是堆和栈。在stm32的启动文件.s文件里面,就有堆栈的设置,其实这个堆栈的内存占用就是在上面RAM分配给RW-data+ZI-data之后的地址开始分配的。
在stm32的启动文件中,statrtup_stm32xxxxxxx.s文件中,有一句这样的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值