如何从SP
寄存器获取实际值?GCC ARM:从SP寄存器获取实际值
我想用一些初始值填满整个SRAM,但我不想覆盖堆栈的实际内容。
我的启动代码(其也覆盖堆的实际内容):
void RESET_handler() {
unsigned *src, *dst;
// initialize memory
// .....
// fill SRAM
dst = &_bss_end;
while (dst < &_stacktop) {
*dst++ = 0x55555555;
}
}
_bss_end
为静态变量和_stacktop
使用的存储器的一端指向结束SRAM存储器的或也堆栈的顶部。
尽管此函数是重置处理程序gcc使它安全并开始推入一些寄存器到堆栈(more info)。是的,在这一点上堆栈的实际内容是无关紧要的,覆盖它是安全的,但对于清除,我想通过用SP的实际值代替&_stacktop
来停止堆积。
除了建议将启动代码改写为汇编程序的建议外,还欢迎其他任何想法。
人们提倡C标准不会喜欢你的问题和我的评论。 char * approximativeStackTop(char x){return(&x);)'? – Marian
我想知道整个练习的目的是什么?你想用这种方式调试一些内存问题吗? –
@Felix在开发过程中很高兴看到有多高堆栈正在运行,你有多少空闲内存,比计算还是任何静态分析要好。 – vlk