前段时间对stm32的启动代码进行了一个小小的研究,发现了一些比较好用的技巧,在这分享下!
总体上说,整个启动代码就是中断初始化为主,以及中断之后如何进行调配函数!
首先看这么一段代码:Reset_Handler
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SysInit
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =SysInit
BLX R0
LDR R0, =__main
BX R0
ENDP
这其实上是Reset中断后生的事情,不难发现,这也就是进入主函数的通道!
我在这里加了一个
IMPORT SysInit
LDR R0, =SysInit
BLX R0
这是我自己写的一个函数,因为我每次程序一开始跑,我就像让他运行这段代码,所以我就把他也加到这里了!
可见,我们如果想在进入主函数之前运行什么,那么我们就可以在这里加我们需要的代码;
一定要注意我加的位置,他其实上就是入栈和出栈的做法!所以我们一定要注意入栈和出栈的顺序!
我们在来看看其他的中断处理,也都是同样的道理!
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
ok,这个其实很简单,不过很实用!
PS:有的人用的是库里面的bootloader,为只读文件,我们需要把他删了,重新复制一个添加进去!