前面写了一篇 STM32的完整启动流程分析,但是感觉有些地方没有完全理明白,因此对不清楚的地方又做了一些总结。 1. MCU最开始一启动后去哪里读代码?CPU上电启动后被设计为去地址0x00000000位置处读取代码;首先会连续读取两个字,分别是栈指针初始值和复位异常处理函数的地址;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中,如Arm7TDMI,复位后会直接读取0地址处的代码进行执行,由软件初始化栈指针,0地址处存放的直接就是中断处理函数,而不是函数地址。 2. 0x0地址处是bootROM代码吗,还是用户bootloader代码?答案是都可以。这其实取决于用户的代码是存放在哪里的。
3. 类似Cortex-M3/M4是如何保证Flash起始地址是栈指针和复位异常处理函数指针的?这一点实际是通过编译的链接文件制定的。比如说如下是我截取的IAR的链接文件.icf。 4. MCU有可能不从0地址开始读代码吗?M7内核芯片比较灵活了,改变了固定从0x0000 0000地址读取中断向量表的问题,以STM32H7为例,可以从 0x0000 0000 到 0x3FFF 0000 所有地址进行启动。专门安排了个选项字节来配置。 声明: |
|
来自: 新用户0118F7lQ > 《文件夹1》