0 Preface/Foreword
1 内存类型
STM32L011包括的内存类型为:RAM和ROM(Flash)。
2 内存对应的代码场景
项目编译之后,从map文件中可以看到有三种类型的内存:
- readonly code memory (Flash/ROM)
- readonly data memory(Flash/ROM)
- readwrite data memory(RAM)
| 分类 | 对应硬件 | 掉电是否丢失 | 备注 |
| readonly code | Flash | 否 | 程序逻辑 |
| readonly data | Flash | 否 | const变量 |
| readwrite data | RAM | 是 | 变量、栈、缓冲区 |
2.1 readonly code memory(只读代码内存)
- 含义:指程序的可执行指令(Machine Code)
- 存储位置:Flash(ROM)
- 包含内容:
- 编写的所有函数代码(C语言逻辑转换成的汇编指令)
- 中断向量表(.intvec)
- 启动代码(startup code)
- 对资源的影响:占用16KB Flash的空间,不占用RAM。
2.2 readonly data memory(只读数据内存)
- 含义:程序中定义的常量和字面量
- 存储位置:Flash (ROM)
- 包含内容:
- 使用const修饰的变量
- 字符串字面量(printf("Hello\n");中的Hello)
- 由于他们在运行时不会改变所以直接放在Flash中,节省宝贵的RAM
- 对资源影响:占用16KB Flash的空间,不占用RAM。
2.3 readwrite data memory(读写数据内存)
- 含义:程序运行期间值会发生变化的变量
- 存储位置:RAM
- 包含内容:
- .data(已初始化数据):有初始值的全局/静态变量(如int x = 10;)。其初始值存放在flash,启动时拷贝到RAM;
- .bss(零初始化数据):没有初始值或初始值为0的全局/静态变量(如int y;)。启动时由代码自动清零。
- CSTACK(栈):局部变量、函数调用信息、中断现场保护。
- HEAP(堆):动态内存分配(如果禁用了HEAP,这部分为0)
- 对资源的影响:这个是最需要关注的数字,该值必须小于STM32L011的2048字节(2KB)