在main函数之前,程序进入Reset_Handler[WEAK],可以通过重新定义Reset_Handler添加我们需要在main之前所执行的函数。
在ARM CC的Reset_Handler中,程序可以拆分为SystemInit和__main。
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP对Reset_Handler重新定义
__ASM void INTO_MAIN(void)
{
IMPORT __main
LDR R0, =__main
BX R0
}
void Reset_Handler(void)
{
SystemInit();
INTO_MAIN();
}如果我们的函数不需要进行堆栈操作,比如判断flash存储的数据,那么修改的函数可以放在INTO_MAIN之前。
经过反编译发现__main主要包含的是__scatterload这个函数

如果需要在main函数之前对GPIO进行配置,必须要在堆栈相关初始化工作完成之后,因此对应的函数应该添加在__main_after_scatterload之前。
版权声明:本文为weixin_42137028原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。