这个是由编译器决定的,比方说下图,在IAR的项目设置中,选择Debugger->Setup
可以将执行的第一个函数修改为其他函数而非main函数。
不同编译器,在执行第一个函数前的初始化动作是不相同的,但是一般都是先进入ResetHandler,然后在通过ST的库函数时钟初始化、重定向等系统初始化操作,再通过编译器的启动函数跳转到main函数中。如下图所示,先分配堆栈大小,然后ResetHandler,到ResetHandler执行中能看到先进行了SystemInit再然后是iar_start_program,接下来才到main函数中。