ARM架构简析

发布时间:2023年12月17日

在这里插入图片描述
在这里插入图片描述
全局与局量等知识

断电后,程序以及数据都在FLASH中。
断电后,内存中就没有变量了。
程序在烧在FLASH中的;
在这里插入图片描述
程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的:

初始化全局变量的过程:
在这里插入图片描述
在这里插入图片描述
= :代表伪指令 (去FLASH中去某个位置 读指令: 数据写到RO中去 完成初始化)
以上的方式是效率低的。那么如果全局变量很多咋办?
(BIN文件是写在 FLASH上的):
在这里插入图片描述
那如果有很多的变量怎么办?
这样程序运行的时候,就会见数据段整段的拷贝到内存。
那如果没有初始值的全局变量呢?
在这里插入图片描述
这那么多的全局变量也保存在FLASH中吗?
解答:不是的。
类似于memset,这些变量在内存中都放在ZI段,运行的时候,相当于把ZI段全部清清零。
全局变量初始化完成之后,我们才去执行main函数。

那么局部变量呢?----- 栈
在这里插入图片描述
过程:
1.记录返回地址 ;记录下一个D的地址。
2.执行C:

LR返回地址会被覆盖!
所以在A开始,就要将LR保存起来,保存在栈中,栈在哪里? 栈就是一块内存。
在这里插入图片描述
所以不仅仅是LR寄存器会被覆盖。

程序运行的时候:
第一步,将数据段拷贝到内存中。
第二步:让SP指向一块空闲的内存;
第三部:调用MAIN函数。
在这里插入图片描述
汇编中:对应的局部变量的写入栈的过程:
在这里插入图片描述

文章来源:https://blog.csdn.net/qqmrchen124/article/details/135045969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。