15. 启动文件详解 — [野火]STM32库开发实战指南——基于野火霸天虎开发板 文档 (embedfire.com)
这个里面对于启动文件的讲解很透彻了,就我说下最后的那部分,文档好像讲没讲清楚,
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
这是栈的初始化函数,我的理解就是,__user_initial_stackheap作为初始化堆栈的函数,就只是往R0,R1,R2装入参数的,然后一个跳转指令 BX,就实现了这个初始化,在_main函数应该会调用这个初始化函数,实现对堆栈的初始化