打印
[STM32F1]

stm32内存空间分配学习

[复制链接]
446|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dspmana|  楼主 | 2024-2-29 11:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图是一张stm32的内存映射图,其中代码区是从0x0800 0000开始的,他的结束地址是0x0800 0000加上实际芯片的flash大小,他的ram的起始地址是0x2000 0000,然后结束地址依然是加上芯片实际的ram大小。


使用特权

评论回复
沙发
digit0| | 2024-2-29 13:28 | 只看该作者
在STM32单片机中,内存空间的分配主要包括Flash(ROM)和RAM(SRAM)两大部分。

1. Flash(ROM)

代码区:存放程序执行的机器码,不可被修改。
RO-data(只读数据段):存储常量、字符串字面量等只读数据,在运行时不能被更改。
RW-data(读写数据段):存放初始化为非零值的全局变量或静态变量,这部分内容在系统上电后会从Flash复制到RAM中,并在运行时可读可写。
2. RAM(SRAM)

堆(Heap):动态内存区域,通过malloc()、calloc()、realloc()等函数动态申请和释放内存。
栈(Stack):用于存储局部变量、函数调用时保存的上下文信息(如寄存器备份),栈大小由编译器决定并在运行时自动增长和收缩。
静态区(Static Area):
初始化的全局变量和静态变量:在程序启动时分配并初始化。
未初始化的全局变量和静态变量(ZI-data, Zero Initialized Data):虽然在源代码中没有赋初值,但在程序开始前会被自动清零。
此外,STM32内部还有不同块的RAM划分,例如Core Coupled Memory (CCM)、Tightly-Coupled Memory (TCM) 等,以及可能存在的外部扩展RAM(External SRAM)。

在实际编程过程中,开发人员需要注意合理安排各个部分的内存使用,避免栈溢出、堆碎片等问题。同时,还可以通过STM32CubeMX工具配置芯片的内存分布,以及通过查看链接脚本(Linker Script)了解更详细的内存布局情况。

使用特权

评论回复
板凳
理想阳| | 2024-2-29 13:29 | 只看该作者
STM32内存学习还是很重要的,也是基础部分,

使用特权

评论回复
地板
ClarkLLOTP| | 2024-2-29 17:15 | 只看该作者
好像超过一点也是可以的

使用特权

评论回复
5
heisexingqisi| | 2024-2-29 22:18 | 只看该作者
是不是可以指定存放的位置。

使用特权

评论回复
6
Henryko| | 2024-2-29 22:23 | 只看该作者
ClarkLLOTP 发表于 2024-2-29 17:15
好像超过一点也是可以的

后面的空间是没有保障的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

2583

帖子

2

粉丝