簡體   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