上电复位到RT-Thread启动过程
1、Reset_Handler
上电复位,执行的第一段代码是启动文件startup_stm32f407xx.s里的汇编程序Reset_Handler;
-
执行SystemInit; 执行__main函数,__main函数是编译器自动生成的函数; 将RW段复制到运行域SRAM中,并初始化ZI段;【1】 加载执行C语言所需要的库; 跳转到main函数; mdk有个扩展的功能,可以将main函数扩展为Sub和Super,所以首先跳转的就是$Sub$$main,至于在main.c中看到的main其实是$Super $$main,rt-thread这样实现使得使用起来更清爽;
关于【1】的说明:
RW字段呢,是一定要复制到SRAM中的,为了性能RO段也可能复制到SRAM;
在之前的一篇文章中写道,bin文件存放了代码、RO字段、RW字段,在程序运行的时候RW字段会被复制到SRAM方便读写,今天才了解到是在__main这里操作的,说起来这么久了都没意识到__main和main不是一个东西;
