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.

[参考译文] TMS320F2800157:链接器将不包含.const 段

Guru**** 2644125 points

Other Parts Discussed in Thread: TMS320F2800157

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1590000/tms320f2800157-linker-will-not-include-const-section

器件型号: TMS320F2800157

您好、

我不熟悉使用链接器脚本将所有内容添加到闪存的已定义部分。  我有一个 TMS320F2800157 LaunchPad、应用需要从闪存运行。  

下面是当前链接器脚本、我承认我已将其黑客攻击在一起以获取此内容。   我的愿望是在闪存中包含所有的应用程序,我觉得我不需要控制它如何存储在闪存中。  我正在编写一个从 RAM 运行的引导加载程序,可以重新刷新它,但我打算一次擦除所有的闪存。  因此、我认为我可以将所有闪存作为一个块进行处理。

使用下面的脚本、我收到以下错误:

../280015x_generic_flash_lnk.cmd“、第 28 行:警告#10097:未找到存储器范围:第 1 页上的 FLASH_BANK0_SEC_127
../280015x_generic_flash_lnk.cmd“、第 28 行:错误#10265:没有可用于放置“.const"的“的有效存储器范围
../280015x_generic_flash_lnk.cmd“、第 28 行:错误#10099-D:程序无法放入可用内存中、或者该段包含一个需要无法为该段生成的蹦床函数的调用站点。 对于段“.const"大小“大小 0x1db6 第 1 页、带有对齐/分块的放置失败

下面的链接器脚本:

MEMORY
{
   BEGIN            : origin = 0x00080000, length = 0x00000002  
   BOOT_RSVD        : origin = 0x00000002, length = 0x00000126
   RAMM0            : origin = 0x00000128, length = 0x000002D8
   RAMM1            : origin = 0x00000400, length = 0x000003F8
   RAMLS0           : origin = 0x00008000, length = 0x00002000
   RAMLS1           : origin = 0x0000A000, length = 0x00001FF8
   BOOTROM          : origin = 0x3F8000, length = 0x7FC0 /* Boot Rom*/
   RESET            : origin = 0x003FFFC0, length = 0x00000002

   /* Flash sectors */
   FLASH_BANK0_SEC_0_127   : origin = 0x080002, length = 0x1FFEE  /* on-chip Flash */
   // FLASH_BANK0_SEC_127_RSVD : origin = 0x0A0FF0, length = 0x0010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
}

SECTIONS
{
    codestart        : > BEGIN
   .text            : >> FLASH_BANK0_SEC_0_127, ALIGN(8)
   .cinit           : > FLASH_BANK0_SEC_0_127, ALIGN(8)
   .switch          : > FLASH_BANK0_SEC_0_127, ALIGN(8)
   .reset           : > RESET,  TYPE = DSECT /* not used, */
   .stack           : > RAMM1
   .bss             : > RAMLS0
   .bss:output      : > RAMLS0
//   .init_array      : >> FLASH_BANK0_SEC_127, ALIGN(8)
   .const           : >> FLASH_BANK0_SEC_127 , ALIGN(8)
   .data            : > RAMLS0
   .sysmem          : > RAMLS0
  .bss:cio          : > RAMLS0


#if defined(__TI_EABI__)
   .TI.ramfunc      : LOAD = FLASH_BANK0_SEC_0_127,
                      RUN = RAMLS0,
                      LOAD_START(RamfuncsLoadStart),
                      LOAD_SIZE(RamfuncsLoadSize),
                      LOAD_END(RamfuncsLoadEnd),
                      RUN_START(RamfuncsRunStart),
                      RUN_SIZE(RamfuncsRunSize),
                      RUN_END(RamfuncsRunEnd),
                      ALIGN(8)
#else
   .TI.ramfunc      : LOAD = FLASH_BANK0_SEC_0_127,
                      RUN = RAMLS0,
                      LOAD_START(_RamfuncsLoadStart),
                      LOAD_SIZE(_RamfuncsLoadSize),
                      LOAD_END(_RamfuncsLoadEnd),
                      RUN_START(_RamfuncsRunStart),
                      RUN_SIZE(_RamfuncsRunSize),
                      RUN_END(_RamfuncsRunEnd),
                      ALIGN(8)
#endif

    /*  Allocate IQ math areas: */
   IQmath           : > BOOTROM, type = NOLOAD, PAGE = 0
   IQmathTables     : > BOOTROM, type = NOLOAD, PAGE = 0
}

我查看了映射文件、发现闪存中使用的最高地址为 00090268、闪存扩展至 0x9FFFF。  const 段需要 00001dc0。  如何告知链接器将其添加到闪存块中?

提前感谢、

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、John:

    请更新定义的.const 段、命名时存在错误。

    错误-  .const :>> FLASH_BANK0_SEC_127 , align(8)

    正确- .const:>> FLASH_BANK0_SEC_0_127、align (8)

    谢谢

    Aswin