stm32的堆、栈、全局变量的分配地址
在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。
总的分布如下所示:
1、栈区(stack)
- 临时创建的局部变量存放在栈区。
- 函数调用时,其入口参数存放在栈区。
- 函数返回时,其返回值存放在栈区。
- const定义的局部变量存放在栈区。
2、堆区(heap)
- 堆区用于存放程序运行中被动态分布的内存段,可增可减。
- 可以有malloc等函数实现动态分布内存。
- 有malloc函数分布的内存,必须用free进行内存释放,否则会造成内存泄漏。
3、全局区(静态区)
- 全局区有.bss段和.data段组成,可读可写。
4、.bss段
- 未初始化的全局变量存放在.bss段。
- 初始化为0的全局变量和初始化为0的静态变量存放在.bss段。
- .bss段不占用可执行文件空间,其内容有操作系统初始化。
5、.data段
- 已经初始化的全局变量存放在.data段。
- 静态变量存放在.data段。
- .data段占用可执行文件空间,其内容有程序初始化。
- const定义的全局变量存放在.rodata段。
6、常量区
- 字符串存放在常量区。
- 常量区的内容不可以被修改。
7、代码区
- 程序执行代码存放在代码区。
- 字符串常量也有可能存放在代码区。
串口通信模板,把main.c(分别在stm32中定义了全局变量和局部变量,并把它们的地址返回给windows)改为如下:
#include "stm32f10x.h"
#include "bsp_usart.h"
char global1[16];
char global2[16];
char global3[