工具/软件:
我目前正在处理一个基于 CC2642 的工程、目的是实现一种固件更新机制、在该机制中、可以将单个二进制映像刷写到任何有效的闪存地址(例如 0x00000 或 0x30000)并从该位置正确执行、而无需重新构建固件或使用不同的链接器脚本。
在这方面,我有几个具体的目标:
•避免在每次部署时维护多个编译或修改链接器配置
•确保无论代码段位于哪个闪存地址、代码段都能正确执行
•将数据段保持为绝对值并保持在固定位置、因为它们是共享的且不依赖于位置
根据我的研究、我了解:
•TI ARM 编译器不支持基于 Cortex-M4 的器件(如 CC2642)的真位置无关代码 (PIC)
•GCC 可以提供与 PIC 相关的标志(例如-FPIC、-fPIE 等)、但没有针对 SimpleLink CC26xx/CC13xx 器件的官方支持或验证
•一种实用的权变措施似乎是使用参数化链接器脚本、并在运行时手动设置 SCB->VTOR 寄存器、以便在跳转到复位处理程序之前重定向到正确的向量表
鉴于此、请您就以下问题提供意见:
1. TI 是否有官方支持或推荐的方法在 CC2642 上实现这种与位置无关的执行模型?
2.手动设置 VTOR 并从备用闪存地址跳转到复位向量是否存在任何已知限制或风险?
3. PIC 工具链或 PIE 版本中是否有对 CC26xx/CC13xx 系列的真正 SDK/SDK(与位置无关的代码和数据)的支持?
非常感谢您的时间和指导。