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并没有做过这些验证,只能给出理论的说明,希望可以帮助到您。