1. 用 static 声明局部或者全局变量用
- 对局部变量用 static 声明,则使用该变量在整个程序执行期间不释放,为其分配的的空间始终存在。
- 全局变量用 static 声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。
2.堆栈
- 栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参等。
- 堆(heap)空间,主要用于动态内存分配,也就是说用 malloc,calloc, realloc 等函数分配的变量空间是在堆上。
寄存器组(堆栈指针寄存器)
Cortex – M7/M4/M3 处理器拥有 R0-R15 的通用寄存器组。其中 R13 作为堆栈指针 SP。 SP 有两个,但在同一时刻只能有一个可以用
主堆栈指针(MSP):这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。
进程堆栈指针(PSP):用于常规的应用程序代码(不处于异常服用例程中时)。
另外以下两点要注意:
大多数情况下的应用,只需使用指针 MSP,而 PSP 多用于 RTOS 中。
R13 的最低两位被硬线连接到 0,并且总是读出 0,这意味着堆栈总是 4 字节对齐的。