TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC26X2R1: persistent_app工程中CMD文件prgEntryAddr变量在那里修改?

Part Number:LAUNCHXL-CC26X2R1

Nick Sun:

您好,

LOAD_START 和 LOAD_END 只是将一个值设置为它们作为参数的符号。例如您提供的代码中,prgEntryAddr 的值是 .resetVecs 部分的起始加载地址。

您不能直接为 prgEntryAddr 设置一个值,但您可以修改包含 .resetVecs 部分组的 base address 。该组被链接在“ENTRY”所保存的内存范围中。

我们可以来查看 linker command 文件中如何定义“ENTRY”的:

ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE

“ENTRY”内存部分从地址“ENTRY_START”开始。

我们来查看“ENTRY_START”的定义方式,也在这个cmd文件中:

#ifdef SECURITY#defineOAD_HDR_SIZE0x90
#else#defineOAD_HDR_SIZE0x50
#endif#define IMG_A_FLASH_START0x00038000/* Image specific addresses */
#ifdef OAD_IMG_A#defineOAD_HDR_STARTIMG_A_FLASH_START#defineOAD_HDR_END(OAD_HDR_START + OAD_HDR_SIZE - 1)#defineENTRY_SIZE0x40#defineENTRY_START(OAD_HDR_END + 1)#defineENTRY_ENDENTRY_START + ENTRY_SIZE - 1#defineFLASH_START(ENTRY_END + 1)#defineFLASH_END(FLASH_BASE + FLASH_SIZE - RESERVED_FLASH_SIZE - 1)
#else#define OAD_HDR_STARTFLASH_BASE#define OAD_HDR_END(OAD_HDR_START + OAD_HDR_SIZE - 1)#define ENTRY_START(OAD_HDR_END + 1)#define ENTRY_SIZE0x40#define ENTRY_ENDENTRY_START + ENTRY_SIZE - 1#define FLASH_START(ENTRY_END + 1)#define FLASH_END(FLASH_BASE + IMG_A_FLASH_START - 1)
#endif

我们可以看到根据传递给链接器的参数,尤其是 #ifdef  OAD_IMG_A 和 #ifdef SECURITY 部分,设置了“ENTRY_START”的值。

我们可以查看工程的 properties -> Build -> Arm Linker -> Advanced Options -> Command File Preprocessing来检查传递给链接器的预定义:

我们可以发现 OAD_IMG_A 和 SECURITY 都是为未修改的 persistent_app 定义的。

假设 ENTRY_START 定义为 (OAD_HDR_END + 1),其中 OAD_HDR_START=IMG_A_FLASH_START 且 IMG_A_FLASH_START=0x00038000。所以反推,如果更改 IMG_A_FLASH_START 的值会导致 prgEntryAddr 获得不同的值。

但也要确保 IMG_A_FLASH_START 设置的值不与任何其他定义的值有矛盾。

我们不建议您做这样的修改,因为可能会导致很多不可预见的问题,TI并没有做过这些验证,只能给出理论的说明,希望可以帮助到您。

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC26X2R1: persistent_app工程中CMD文件prgEntryAddr变量在那里修改?
分享到: 更多 (0)