关于初始化过程中函数SystemInit()变量初始化的问题

2019-07-20 21:06发布

问题的描述如下在STM32上电复位时,系统首先进入SystemInit()函数对系统时钟进行初始化,然后跳转到scatterload,scatterload将RW区中初始化非零的变量从FLASH复制到SRAM,接着将ZI区将需要初始化为零的变量初始化为零。然后进入mian函数。现在有个问题,就是SystemInit()函数中的局部变量是如何初始化的。因为SystemInit()函数之后才进行变量的初始化,大家是如何理解这个问题的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
zmingwang
1楼-- · 2019-07-21 02:12
本帖最后由 zmingwang 于 2016-7-26 09:18 编辑

SystemInit()函数只是初始化CPU时钟和中断向量.
你说的那些什么scatterload,初始化RW,ZI这些,都是在__main里面做的,这是KEIL提供的C语言库.
SystemInit()要用的是主堆栈,叫MSP,这个堆栈地址是保存在FLASH的头4个字节,由CPU自行加载.
至于局部变量的初始化,如果你的局部变量少,编译器会分配寄存器给你当局部变量,如果局部变量多了,会给你分配一段栈空间,如果你的局部变量有初始化值,编译器会给对应的地址赋立即数或是从FLASH中读取出来赋值.
ianhom
2楼-- · 2019-07-21 03:24
 精彩回答 2  元偷偷看……

一周热门 更多>