金牌会员
 
- 积分
- 1617
- 金钱
- 1617
- 注册时间
- 2017-7-17
- 在线时间
- 318 小时
|
发表于 2018-4-28 16:20:07
|
显示全部楼层
本帖最后由 candylife9 于 2018-4-28 17:58 编辑
我先假设你定义的全局变量int x=123.
1、首先你的程序要下载到一个存储设备(STM32是FLASH),程序代码+定义的变量都包含在下载镜像(hex)里面,然后这些信息根据镜像里面分配的地址就被下载到了指定的地址,比如0x08000000.
2、单片机上电后就会执行程序,那他怎么知道从哪里取程序,你定义了哪些变量?这些变量在什么位置?这些变量的初值是多少?------这些信息都包含在镜像中。
3、单片机在上电后,会从加载区域(一般就是程序下载的地方)将你定义的变量加载到他们的运行区域(STM32是SDRAM),并赋初值。然后从加载区域取指令开始执行程序。
4、你定义了一个x=123,你生成的镜像文件中会声明一个4字节的连续存储空间(这4个字节存储空间的地址在链接的时候确定,比如ADDR1),初值是123,这些信息一开始是下载到FLASH里面的。上电初始化的时候,就会用123这个值初始化ADDR1这个地址,以后ADDR1这个地址就被会当成变量x使用了。
不知道你明白没有。 |
|