全局与局量等知识
断电后,程序以及数据都在FLASH中。
断电后,内存中就没有变量了。
程序在烧在FLASH中的;
程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的:
初始化全局变量的过程:
= :代表伪指令 (去FLASH中去某个位置 读指令: 数据写到RO中去 完成初始化)
以上的方式是效率低的。那么如果全局变量很多咋办?
(BIN文件是写在 FLASH上的):
那如果有很多的变量怎么办?
这样程序运行的时候,就会见数据段整段的拷贝到内存。
那如果没有初始值的全局变量呢?
这那么多的全局变量也保存在FLASH中吗?
解答:不是的。
类似于memset,这些变量在内存中都放在ZI段,运行的时候,相当于把ZI段全部清清零。
全局变量初始化完成之后,我们才去执行main函数。
那么局部变量呢?----- 栈
过程:
1.记录返回地址 ;记录下一个D的地址。
2.执行C:
LR返回地址会被覆盖!
所以在A开始,就要将LR保存起来,保存在栈中,栈在哪里? 栈就是一块内存。
所以不仅仅是LR寄存器会被覆盖。
程序运行的时候:
第一步,将数据段拷贝到内存中。
第二步:让SP指向一块空闲的内存;
第三部:调用MAIN函数。
汇编中:对应的局部变量的写入栈的过程: