linker - STM32F4:引导加载程序在运行时跳转到不同的闪存位置
问题描述
我正在使用带有 2MB 闪存的 STM32F479 定制板(每个存储库中 1MB) 我的引导加载程序位于闪存地址 0x0800000 应用程序版本 35 位于地址 0x08020000(存储在扇区 5 中,该扇区位于闪存 bank1 中) 应用程序版本 36 位于地址 0x08120000(存储在部门 17)
booloader 读取一个非易失性变量(bLastBankUsed:1:当前使用的应用程序。在扇区 5 银行 1 中,2:当前使用的应用程序。在扇区 17 银行 2 中)。
这就是我们处理应用程序更新的方式。下次我们更新应用程序(版本 37)和当前使用的银行 2 时,应用程序 37 将转到银行 1 的扇区 5。基本上,只要我们的应用程序有更新,我们就会在 2 个闪存地址之间进行 ping-pong。
当 booloader 必须跳转到 bank1 的应用程序时,没问题:工作正常。
问题:当booloader必须跳转到bank2的应用程序时,除非我通过将符号ICFEDIT_intvec_start设置为0x08120000并将符号ICFEDIT_region_ROM_start设置为 0x08120000来修改bank2应用程序的icf文件,否则它将失败
///////////////////////////////////////// ///////////////////////
我的引导程序
调用bank1的0x08020000和bank2的0x08120000
所以跳转到bank1(adr 0x08020000)的应用程序总是有效的。在我修改其 icf 2 符号(将符号ICFEDIT_intvec_start设置为 0x08120000 并将符号ICFEDIT_region_ROM_start设置为 0x08120000)之前,跳转到 bank2 的应用程序(Adr 0x08120000)不起作用 。
如何在运行时从软件设置需要修改的 2 个 icf 符号?如何使用在运行时更改的一些链接器设置跳转到应用程序?谢谢
解决方案
推荐阅读
- sql - Postgres,使用列中的值将结果聚合到单行
- powershell - 需要帮助创建 PowerShell 脚本以清除 Active Directory 属性
- ios - Swift:如何正确解码 unicode 字符?
- performance - Powershell:使用“Out-File”写入较小的文件需要 30 倍的时间
- java - 以最快、最有效的方式获取二维矩阵的子矩阵
- swift - 为什么我不能将 subView 添加到我的 stackView 而不使 stackView 成为惰性变量?
- node.js - nodejs命令行应用程序的快速日志记录解决方案
- c# - 在列表\一组元素上执行条件
- flutter - 如何在 Flutter with Flushbar 中使用 AnimationController 重复动画?
- elixir - Elixir:混合 deps.get 请求失败(403)并且没有缓存副本