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.

[参考译文] CCS/TMS320F28379D:是否有任何修复链接器错误的技术?

Guru**** 2535440 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/602656/ccs-tms320f28379d-is-there-any-technique-to-fix-the-linker-error

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

大家好、

链接器命令 am 使用 C:\ti\c2000Ware_1_00_01_00\device_support\f2837xd\common\cmd\2837xD_RAM_lnk_cpu1.cmd

2837xD_RAM_lnk_CPU1.cmd"、第53行:错误#10099-D:程序将无法放入可用内存中。 对齐/分块放置在".text"大小为0x15cf 页0的位置失败。 可用存储器范围:
RAMM0大小:0x2DE 未使用:0x7最大孔:0x7
RAMD0大小:0x800未使用:0x50最大孔:0x50
RAMLS0大小:0x800未使用:0x4c1最大孔:0x4c1
RAMLS1大小:0x800未使用:0x800最大孔:0x800
RAMLS2大小:0x800未使用:0x800最大孔:0x800
RAMLS3大小:0x800未使用:0x800最大孔:0x800
RAMLS4大小:0x800未使用:0x800最大孔:0x800

在第53行定义的段是  .text       :>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE=0

查找文本大小是否存在跟踪和错误?

哪个部分可以连接到部分以增加、请告诉我

谢谢

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

    您好、Ashok、

    有时.text 的某些部分无法拆分。 这意味着它 需要 在存储器中有一个连续块才能适应。  您将需要创建.text 可以使用的组合 Ramm 段。 例如、RAMLS2_3_4将是 RAM LS2、LS3和 LS4的组合范围。 此 wiki 页面进一步详细说明 了如何组合存储器范围。
    您 可以尝试的另一项操作是将拆分 (>>)切换到单个(>)、并查看警告是否已删除。 这会将存储器分配给任一区域、而不会将其拆分为不同的存储器区域。
    希望这对您有所帮助。
    此致、
    Ozino
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复。

    使用 split[拆分]选项、即>>至单个>链接器输出。

    2837xD_RAM_lnk_CPU1.cmd"、第53行:错误#10099-D:程序将无法放入可用内存中。  对齐/分块放置在".text"大小为0x1603页0的位置失败。  可用存储器范围:

     RAMM0    大小:0x2DE    未使用:0x2c0    最大空洞:0x2c0   

     RAMD0    大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS0   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS1   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS2   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS3   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS4   大小:0x800    未使用:0x800    最大孔:0x800

    不带拆分选项

    2837xD_RAM_lnk_CPU1.cmd"、第53行:错误#10099-D:程序将无法放入可用内存中。  对齐/分块放置在".text"大小为0x1603页0的位置失败。  可用存储器范围:

     RAMM0    大小:0x2DE    未使用:0x7      最大孔数:0x7    

     RAMD0    大小:0x800    未使用:0x71     最大孔数:0x71    

     RAMLS0   大小:0x800    未使用:0x4c1    最大孔:0x4c1   

     RAMLS1   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS2   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS3   大小:0x800    未使用:0x800    最大孔:0x800   

     RAMLS4   大小:0x800    未使用:0x800    最大孔:0x800

    我认为可能无法适应我的应用片上 RAM、对吗?

    如果您提供示例文件以适应各段、则可能会对其进行 grep 操作。

    谢谢

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

    您是否尝试将 RAM LS 存储器范围组合成一个更大的存储器范围? 这可能使您的程序适合、因为代码的一部分似乎无法在 RAM 范围之间拆分。 我建议尝试将 RAMLS0、RAMLS1、RAMLS2、RAMLS3、RAMLS4范围合并为一个范围。 可能已重命名为 RAMLS1_2_3_4。 不要忘记对.text 段进行类似的更改。 如果您需要有关如何组合存储器范围的更多信息、请参阅我之前的帖子中链接中提供的示例。 谢谢。

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

    非常感谢。

    这是链接器文件存储器和段的更改。


    存储器

    第0页:
    /* begin 用于"引导至 SARAM"引导加载程序模式*/

    开始:origin = 0x000000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    /* RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000、length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    RAMLS4:origin = 0x00A000、length = 0x000800 */
    RAMLS_1_2_3_4:origin = 0x008800,length = 0x002000
    复位:origin = 0x3FFFC0,length = 0x000002

    第1页:

    BOOT_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将此用于堆栈*/
    RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
    RAMD1 :origin = 0x00B800,length = 0x000800

    RAMLS5 :origin = 0x00A800,length = 0x000800

    RAMGS0 :origin = 0x00C000、length = 0x001000
    RAMGS1 :origin = 0x00D000、length = 0x001000
    RAMGS2 :origin = 0x00E000、length = 0x001000
    RAMGS3 :origin = 0x00F000、length = 0x001000
    RAMGS4. :origin = 0x010000,length = 0x001000
    RAMGS5. :origin = 0x011000,length = 0x001000
    RAMGS6 :origin = 0x012000,length = 0x001000
    RAMGS7 :origin = 0x013000、length = 0x001000
    RAMGS8. :origin = 0x014000、length = 0x001000
    RAMGS9. :origin = 0x015000,length = 0x001000
    RAMGS10 :origin = 0x016000,length = 0x001000
    RAMGS11. :origin = 0x017000、length = 0x001000
    RAMGS12. :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS13. :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS15 :origin = 0x01B000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *

    CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
    CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400

    CANA_MSG_RAM :origin = 0x049000、length = 0x000800
    CANB_MSG_RAM :origin = 0x04B000、length = 0x000800



    部分

    codestart :>开始, PAGE = 0
    /*.text :> RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,PAGE = 0*/
    .text :> RAMLS_1_2_3_4,PAGE = 0
    .cinit :> RAMM0, PAGE = 0
    .pinit :> RAMM0, PAGE = 0
    切换 :> RAMM0, PAGE = 0
    复位 :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/

    堆栈 :> RAMM1, PAGE = 1.
    ebss :> RAMLS5,page = 1.
    .econst :> RAMLS5,page = 1.
    等斯梅姆 :> RAMLS5,page = 1.
    filter_RegsFile:> RAMGS0,PAGE = 1

    ramgs0 :> RAMGS0,PAGE = 1
    频率1 :> RAMGS1,PAGE = 1

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}>RAMM0, PAGE = 0
    其他
    ramfuncs:>RAMM0 PAGE = 0
    #endif
    #endif

    /*使用 IPC API 驱动程序时需要以下部分定义*/
    组:> CPU1TOCPU2RAM,PAGE = 1

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX


    组:> CPU2TOCPU1RAM,PAGE = 1

    GETBUFFER:TYPE = DSECT
    GETWRITEIDX:TYPE = DSECT
    PUTREADIDX:TYPE = DSECT


    /*以下部分定义适用于 SDFM 示例*/
    filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
    Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333


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

    很高兴它能起作用! 确保在组合段中包含 RAMLS0存储器范围、或将其保留为自己的存储器范围。 您的起始地址不包括 RAMLS0的起始地址、但该段保留在外。 确保在.text 段中进行相同的更改。

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

    您好、Ozino Odharo、


    谢谢、您找到了我的错误。

    这是更新后的映射文件。

    存储器

    第0页:
      /* begin 用于"引导至 SARAM"引导加载程序模式  */

      开始           :origin = 0x000000,length = 0x000002
      RAMM0           :origin = 0x000122、length = 0x0002DE
      RAMD0           :origin = 0x00B000、length = 0x000800
      RAMLS0        :origin = 0x008000、length = 0x000800
       /* RAMLS1          :origin = 0x008800,length = 0x000800
      RAMLS2       :origin = 0x009000,length = 0x000800
      RAMLS3       :origin = 0x009800,length = 0x000800
      RAMLS4       :origin = 0x00A000、length = 0x000800 */
      RAMLS_1_2_3_4   :origin = 0x008800,length = 0x002000
      复位           :origin = 0x3FFFC0,length = 0x000002

    第1页:

      BOOT_RSVD      :origin = 0x000002,length = 0x000120    // M0的一部分,引导 ROM 将此用于栈*/
      RAMM1          :origin = 0x000400、length = 0x000400    //片上 RAM 块 M1 *
      RAMD1          :origin = 0x00B800,length = 0x000800

      RAMLS5     :origin = 0x00A800,length = 0x000800

      RAMGS0     :origin = 0x00C000、length = 0x001000
      RAMGS1     :origin = 0x00D000、length = 0x001000
      RAMGS2     :origin = 0x00E000、length = 0x001000
      RAMGS3     :origin = 0x00F000、length = 0x001000
      RAMGS4     :origin = 0x010000,length = 0x001000
      RAMGS5     :origin = 0x011000,length = 0x001000
      RAMGS6     :origin = 0x012000,length = 0x001000
      RAMGS7     :origin = 0x013000,length = 0x001000
      RAMGS8     :origin = 0x014000,length = 0x001000
      RAMGS9     :origin = 0x015000,length = 0x001000
      RAMGS10    :origin = 0x016000,length = 0x001000
      RAMGS11    :origin = 0x017000,length = 0x001000
      RAMGS12    :origin = 0x018000,length = 0x001000    //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
      RAMGS13    :origin = 0x019000,length = 0x001000    //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
      RAMGS14    :origin = 0x01A000,length = 0x001000    //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *
      RAMGS15    :origin = 0x01B000,length = 0x001000    //*仅在 F28379D、F28377D、F28375D 设备上可用。 移除其他设备上的线路。 *

      CPU2TOCPU1RAM  :origin = 0x03F800,length = 0x000400
      CPU1TOCPU2RAM  :origin = 0x03FC00,length = 0x000400

      CANA_MSG_RAM    :origin = 0x049000、length = 0x000800
      CANB_MSG_RAM    :origin = 0x04B000、length = 0x000800


    部分

      codestart       :> begin,    page = 0
      /*.text           :> RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,  page = 0*/
      .text           :> RAMLS_1_2_3_4,page = 0
      .cinit          :> RAMM0,    page = 0
      .pinit          :> RAMM0,    page = 0
      switch         :>RAMM0,    page = 0
      .reset          :> reset,    page = 0,type = DSECT //未使用,*/

      .stack          :>RAMM1,    PAGE = 1.
      .ebss           :> RAMLS5,   PAGE = 1.
      econst         :> RAMLS5,   page = 1.
      .esysmem        :> RAMLS5,   page = 1.
      filter_RegsFile :> RAMGS0,   PAGE = 1

      RAMS0          :>RAMGS0,   PAGE = 1
      ramgs1          :>RAMGS1,   page = 1.

    #ifdef __TI_Compiler_version__
      #if __TI_Compiler_version__>=15009000
       .TI.ramfunc:{}> RAMM0,     PAGE = 0
      其他
       ramfuncs   :>RAMM0     page = 0   
      #endif
    #endif

      /*使用 IPC API 驱动程序时需要以下部分定义*/
       组:> CPU1TOCPU2RAM,PAGE = 1
       {
           PUTBUFFER
           PUTWRITEIDX
           GETREADIDX
       }

       组:> CPU2TOCPU1RAM,PAGE = 1
       {
           GETBUFFER:   TYPE = DSECT
           GETWRITEIDX: TYPE = DSECT
           PUTREADIDX:  TYPE = DSECT
       }

       /*以下部分定义适用于 SDFM 示例*/
      filter1_RegsFile:> RAMGS1, PAGE = 1,fill=0x1111
      Filter2_RegsFile:> RAMGS2, PAGE = 1,fill=0x2222
      Filter3_RegsFile:> RAMGS3, PAGE = 1,fill=0x3333
      Filter4_RegsFile:> RAMGS4, PAGE = 1,fill=0x4444
      Differit_RegsFile:>RAMGS5, PAGE = 1,fill=0x3333

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

    没问题。 很高兴您的应用程序正在运行。

    -Ozino