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 引用、要么不使用它们即可工作。