This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Part Number: LAUNCHXL-CC26X2R1


  • 您好,

    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
      #define  OAD_HDR_SIZE            0x90
    #else
      #define  OAD_HDR_SIZE            0x50
    #endif
    
    #define IMG_A_FLASH_START          0x00038000
    
    /* Image specific addresses */
    #ifdef OAD_IMG_A
      #define  OAD_HDR_START           IMG_A_FLASH_START
      #define  OAD_HDR_END             (OAD_HDR_START + OAD_HDR_SIZE - 1)
      #define  ENTRY_SIZE              0x40
      #define  ENTRY_START             (OAD_HDR_END + 1)
      #define  ENTRY_END               ENTRY_START + ENTRY_SIZE - 1
      #define  FLASH_START             (ENTRY_END + 1)
      #define  FLASH_END               (FLASH_BASE + FLASH_SIZE - RESERVED_FLASH_SIZE - 1)
    #else
      #define OAD_HDR_START            FLASH_BASE
      #define OAD_HDR_END              (OAD_HDR_START + OAD_HDR_SIZE - 1)
    
      #define ENTRY_START              (OAD_HDR_END + 1)
      #define ENTRY_SIZE               0x40
      #define ENTRY_END                ENTRY_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并没有做过这些验证,只能给出理论的说明,希望可以帮助到您。