转载自公众号「有思考的人」,作者:ksj
一、首先简要介绍局部变量和全局变量区别
(1)作用域
全局变量具有全局作用域,适用于所有源文件。但在不包含全局变量定义的文件中,需使用extern关键字声明这个全局变量后,方可正常使用。
静态全局变量也具有全局作用域。它与全局变量的区别是,它仅仅作用于定义它的文件,程序中其他文件不可用。
局部变量只有局部作用域。只在函数执行期间存在,当函数调用结束后,变量将被撤销,其所占用内存被收回。
静态局部变量只有局部作用域。它从初始化到函数运行结束一直存在,在整个程序运行期间一直有效。它与全局变量的区别在于,全局变量对所有函数可见,而静态局部变量只对自己的函数始终可见。
(2)存储空间
全局变量、静态全局变量、静态局部变量都在静态存储区分配空间,而局部变量在栈分配空间。
二、Cortex-M3内核中MSP/PSP
1、在CM3处理器中有两个堆栈指针MSP/PSP,这两个都是R13/SP,R13是Banked。
MSP:它有OS内核、异常服务历程以及所有需要特权访问的应用程序代码访问。程序复位默认使用MSP。
PSP:用于常规的应用程序代码。
通过CM3的CONTROL寄存器可选择当前使用哪个堆栈指针。
2、
<