stm32启动代码问题
栈名:S TAC K 大小:Stack_Size 只分配空间不做初始化或者初始化为0:NOINIT 可读可写:READWRITE : 按8 字节对齐:ALI GN=3栈顶地址:__in it ia l_s pStack_Size EQ U 0x00000400 A R EA S TAC K,NOINIT,READWRITE ,ALI GN=3 Stack_Mem S PA C E Stack_Size __in it ia l_s p请问以上程序中的:__in it ia l_s p 这个没有定义编译器怎么知道它呢 谢谢RE:stm32启动代码问题
__initial_sp 是编译器自带的定义吧回复:stm32启动代码问题
这个在编译器里面有设置,比如MDK的工程config里面RE:stm32启动代码问题
__initial_sp:这个函数内容见下面堆的设置;Heap Configuration
; Heap Size (in Bytes)
;
Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3
最上面的是栈的设置,
RE:stm32启动代码问题
编译器的配置有的RE:stm32启动代码问题
这些事预编译指令, 是编译器自带的。C语言编译出来都的内容包括: RO(代码)、RW(数据/也就是有初始化的变量)、ZI(未初始化的变量)。
这个是ARM构架的内容。
EQU是汇编指令,
ALIGN是预编译指令,用来做全局变量对齐的。
A R EA S TAC K,NOINIT,READWRITE ,ALI GN=3
RE:stm32启动代码问题
_initial_sp 是个标签,代表当前指令的地址,由汇编器计算出的,代码里使用space分配了Stack_Size个内存单元后再在之后加上_initial_sp,后面会用DCD __initial_sp在向量表0初始化栈顶地址,使用堆栈时栈顶地址减1恰好是分配的栈区间
页:
[1]