带刺儿 发表于 2013-12-26 09:45:30

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   这个没有定义编译器怎么知道它呢 谢谢

有缘于你 发表于 2013-12-26 12:09:42

RE:stm32启动代码问题

__initial_sp 是编译器自带的定义吧

dzc2001 发表于 2013-12-26 15:57:45

回复:stm32启动代码问题

 这个在编译器里面有设置,比如MDK的工程config里面

fengye5340 发表于 2013-12-26 17:03:44

RE:stm32启动代码问题

__initial_sp:这个函数内容见下面堆的设置
;Heap Configuration
;   Heap Size (in Bytes)
;
Heap_Size       EQU   0x00000200
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
最上面的是栈的设置,

勒布朗 发表于 2013-12-26 21:03:49

RE:stm32启动代码问题

编译器的配置有的

wkuang 发表于 2013-12-27 22:44:06

RE:stm32启动代码问题

这些事预编译指令, 是编译器自带的。   
C语言编译出来都的内容包括: RO(代码)、RW(数据/也就是有初始化的变量)、ZI(未初始化的变量)。
这个是ARM构架的内容。
EQU是汇编指令,
ALIGN是预编译指令,用来做全局变量对齐的。
A R EA   S TAC K,NOINIT,READWRITE ,ALI GN=3

温柔的武士刀 发表于 2013-12-28 14:34:40

RE:stm32启动代码问题

_initial_sp 是个标签,代表当前指令的地址,由汇编器计算出的,代码里使用space分配了Stack_Size个内存单元后再在之后加上_initial_sp,后面会用DCD   __initial_sp在向量表0初始化栈顶地址,使用堆栈时栈顶地址减1恰好是分配的栈区间
页: [1]
查看完整版本: stm32启动代码问题