ios main函数之前的操作_添加函数在ARM在进入main函数之前

在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这个函数

a91a3c6af8221c901395733c6f97980f.png

如果需要在main函数之前对GPIO进行配置,必须要在堆栈相关初始化工作完成之后,因此对应的函数应该添加在__main_after_scatterload之前。


版权声明:本文为weixin_42137028原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。