我有以下问题:
STM32F7 Flash从0x0800 0000开始。我的程序运行正常。 然后,我将代码移入FLASH中的0x0802 0000处,以留出空间供将来使用引导程序。我更改了MemoryMap.xml文件:
<MemorySegment start="0x08020000" name="FLASH" size="0x80000" access="ReadOnly"/>
和相应的flashplacement.xml文件:
<ProgramSection alignment="0x100" load="Yes" name=".vectors" start=" 0x8020000"/>
并开始调试...。程序可以正常运行,直到发生链接错误,并通过调用HAL_NVIC_SystemReset触发系统重新启动。 结果是一个挂起的应用程序,当我的代码位于FLASH(0x0800 0000)的开头时情况并非如此 有人知道为什么会这样吗?
致谢
/ Kostas
答案 0 :(得分:1)
答案很简单。您不能只移动内存起始地址。您的微型计算机将从与通常相同的地址获得堆栈指针值和复位处理程序例程地址。您需要已经对此引导加载程序进行了刷新(至少矢量表和重置处理程序会设置新的矢量表,设置应用程序堆栈指针并将控件传递给您的应用程序重置处理程序