我现在正在研究 stm32l152。
我的启动向量表位于 flash 上0x0800 0000
,其中有一个有效的复位处理程序向量和堆栈指针。其余的异常/中断向量只是无限循环。然后我在 ram 中设置另一个向量表,从0x2000 0000
. 该向量表将包含所有必要的向量。
我的问题是,在进行内存重新映射以映射0x0000 0000
到0x2000 0000
之后,当我的中断触发时,似乎 mcu 仍在寻找0x0800 0000
. 我已经通过将闪存表中的相关向量更改为 ram 表中的相关向量来确认这一点。如果闪存表相关向量指向无限循环,我的程序将无限循环。另外,我通过写/读回一些内存位置来确认我的内存重映射是正确的0x0000 0000
, 0x0800 0000
, 0x2000 0000
.
接下来,我使用另一种方法更改 mcu 中的 VTOR 以将向量表偏移0x2000 0000
. 现在,它可以工作了,MCU 将在 ram 中找到向量。请注意,在此方法中,我没有进行任何上述内存重新映射。
我的问题是:我可以使用内存重映射来重新定位我的向量表(不更改 VTOR)吗?
内存重映射还有哪些其他用途?
我可以在运行时写入0x0000 0000
(映射到0x0800 0000
闪存)和修改闪存吗?