[英]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.