vector - STM32F7 系统复位后挂起
问题描述
我有以下问题:
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) 的开头时,情况并非如此。有人知道为什么会发生这种情况吗?
问候
/科斯塔斯
解决方案
答案相当简单。你不能只移动内存起始地址。您的 micro 将像往常一样从同一地址获取堆栈指针值和重置处理程序例程地址。你需要让这个引导加载程序已经闪烁(至少向量表和重置处理程序将设置新的向量表,设置应用程序堆栈指针并将控制权传递给你的应用程序重置句柄
推荐阅读
- r - 在数据框中分别计算多个变量,其中变量名包含一个序列
- html - 将 iframe 移动到另一个 HTML 列
- javascript - ReactJS 单击时更改按钮
- javascript - 在 HTML / Javascript / CSS 中绘制虚拟(假)carret
- r - 无法在 Bookdown 中使用自定义模板
- php - 在 index.php 中的 php 中包含不同的标头
- jsdoc - 在 JsDoc 3 中,注释返回对象的正确方法是什么?
- powershell - PowerShell 中转换文件类型的新位置路径
- c# - 如何在 C# 中检查数据库表和控制器和操作列表
- python - 如何并行化 for 循环以在 PyTorch 中使用?