繁体   English   中英

GCC ARM:从SP寄存器获取实际值

[英]GCC ARM: get actual value from SP register

如何从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使它安全,并在开始时将一些寄存器推入堆栈( 更多信息 )。 是的,这时堆栈的实际内容无关紧要,并且可以覆盖它,但出于安全考虑,我想通过用SP的实际值替换&_stacktop来停止在堆栈之前填充。

除建议将启动代码重写为汇编程序外,其他任何想法也都欢迎。

只能通过启动文件移动来可靠地完成此操作。

我将仅关注openSTM32类型启动的单个堆栈(对于线程*特权)示例:

/* Call the clock system intitialization function.*/
    bl  SystemInit
/* Call static constructors */

    bl  fillStack  // <------------ add this

    bl __libc_init_array
/* Call the application's entry point.*/
    bl  main

然后在您的任何C文件中实现fillStack函数。 使用诸如__get_MSP()类的CMSIS内部指令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM