Thread 中讨论的其他器件: SysBIOS、TIMAC、 CC2650
我撰写的是一个一直在运行非 TI RTOS 解决方案的现有(已部署)硬件产品。 由于 CC2630上闪存的性质、我无法从软件写入低于0x1000的闪存地址、因此我可以远程应用的任何更新都只能对0x1000处及之后的代码有效。
我对 ICF 文件执行了以下操作
- define symbol FLASH_SIZE = 0x00020000; // 128K
+ define symbol FLASH_SIZE = 0x0001F000; // 124K
..
-define region FLASH = mem:[from FLASH_START to FLASH_END];
+define region FLASH = mem:[from FLASH_SLOT_1 to FLASH_END];
..
-place at address mem:FLASH_START { readonly section .intvec };
-keep { readonly section .intvec };
+place at address mem:FLASH_SLOT_1 { readonly section .intvec };
+keep { readonly section .intvec };
... (cc26xx_rtos_rom.icf, done with every item below 0x1000)
-place at address mem:0x00000538 {readonly section .const_xdc_runtime_IModule_Interface__BASE__C};
+place at address mem:0x00001538 {readonly section .const_xdc_runtime_IModule_Interface__BASE__C};
结果会进行编译、但在跳至__IAR_program_start 后很快会失败。 它始终以 ti_sysbios_rom_cortexm_cc26xx_CC26xx_BadRomLink__E 结尾。 我尝试了删除 USE_SYSBIOS_IN_ROM=1、但它并未更改结果。 以下代码仍在 configPkg/package/cfg/app_prm3.c 中自动生成
Void ti_sysbios_rom_cortexm_cc26xx_CC26xx_checkRevision__E()
{
if (*((UInt32 *)(REVISION_WORD)) != 0x20284770) {
ti_sysbios_rom_cortexm_cc26xx_CC26xx_badRomRevision__E();
}
if (&ti_sysbios_rom_ROM_AONRTCChannelEnable != (Void *)(0x590)) {
ti_sysbios_rom_cortexm_cc26xx_CC26xx_badRomLink__E();
}
}
此代码由 CC26xx.xdt 生成条件取决于它是否是 IAR 构建、与 ROM 中的 SYSBIOS 以及它可能位于何处无关
%if (Program.build.target.$name.match(/iar/)) {
#pragma inline=never
Void ti_sysbios_rom_cortexm_cc26xx_CC26xx_badRomLink__E() {
/* Loop here forever if application is built without the ROM section placements in the .icf file */
while(1) {
;
}
}
%}
Void ti_sysbios_rom_cortexm_cc26xx_CC26xx_checkRevision__E()
{
if (*((UInt32 *)(REVISION_WORD)) != 0x20284770) {
ti_sysbios_rom_cortexm_cc26xx_CC26xx_badRomRevision__E();
}
%if (Program.build.target.$name.match(/iar/)) {
if (&ti_sysbios_rom_ROM_AONRTCChannelEnable != (Void *)(0x590)) {
ti_sysbios_rom_cortexm_cc26xx_CC26xx_badRomLink__E();
}
%}
}
我不知道从这里去哪里。 我要么需要一种方法来正确移动高于0x1000的 ROM 引用、要么不使用它们即可工作。