发布网友 发布时间:2024-05-11 20:47
共1个回答
热心网友 时间:2024-08-31 07:54
你说的这个应该是stm32的芯片,而且是128 Kbytes 的 SRAM,
主流STM32芯片的SRAM地址范围都是从 0x2000 0000处开始。
好,答案来了:
128 Kbytes的SRAM 地址范围是 0x2000 0000 --0x2001 FFFF;
堆栈指针(SP) 必须在 0x2000 0000 -- 0x2001 FFFF 这块Region,这很好理解对吧,因为SRAM就在这嘛,只要SP位于这块Region即可。
所以 SP & 0x2FFE 0000 == 0x2000 0000,不去管SP的bit16 - 0,只检查bit27-17。
假如是 64 Kbytes 的 RAM,地址Region为 0x2000 0000 -- 0x2000 FFFF,那么此时应该这样写 SP & 0x2FFF 0000 == 0x2000 0000。当然,写成 SP & 0x2FFE 0000 也能执行,只是会带来隐患,这种Bug很讨厌的,因为不好发现。