我目前正在开发一个嵌入式项目(STM32F103RB,CooCox CoIDE v.1.7.6 with arm-none-eabi-gcc 4.8 2013q4)。我有一个简单的项目:
int main(void)
{
return 0;
}
我正在使用以下代码(摘自startup_stm32f10x_md.c
)来设置堆栈大小
#define STACK_SIZE 0x00001000
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];
在我的理解中.bss是.text之后但在.heap和.stack之前保存未初始化数据的部分。因此.bss应该 NOT 受到增加堆栈大小的影响。但在这种情况下.bss IS 。那么.co_stack可能是一种用户定义的堆栈?但是我真的没有得到:.bss增长了4倍的堆栈大小? e.g。
#define STACK_SIZE 0x00001000
.bss 16384 = 0x4000
或
#define STACK_SIZE 0x00000100
.bss 1024 = 0x400
答案 0 :(得分:2)
我在网上找到的startup_stm32f10x_md.c的副本将堆栈定义为long的数组(建议保持长字对齐)。
static unsigned long pulStack[STACK_SIZE];
0x1000 longs加起来为4096 x 4 = 16K。