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.

[参考译文] TMS320F28379D:添加死区固件时出现链路错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1593623/tms320f28379d-link-error-while-adding-deadband-firmware

部件号: TMS320F28379D

主席先生/女士、

当出现以下错误时、我们需要对固件进行哪些更改? 我当时尝试从 examples 文件夹中添加死区代码。

[63]The <Linking>
[64]../2837xD_RAM_lnk_cpu1.cmd“、第 80 行:错误#10099-D:程序将无法放入可用存储器中、或者该部分包含一个需要无法为该部分生成的蹦床函数的调用站点。 对于段“.text"大小“大小为 0x1e96 第 0 页、带有对齐/分块的放置失败。  可用存储器范围:
[65] RAMD0    大小    :0x800 未使用:0x2      最大孔数:0x2
[66] RAMLS0   大小    :0x800 未使用:0x6      最大孔:0x6
[67] RAMLS1   大小    :0x800 未使用:0x235    最大孔:0x235
[68] RAMLS2   大小    :0x800 未使用:0x800    最大孔:0x800
[69] RAMLS3   大小    :0x800 未使用:0x800    最大孔:0x800
[70] RAMLS4   大小    :0x800 未使用:0x7db    最大孔:0x7db
[71]错误#10010:链接过程中遇到错误;未构建“integrated_code_compremental.out"</s>“

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

    您好、Prashant、

    您能否共享链接器 cmd 文件以供进一步分析。 错误是由于空间不足而无法容纳文本内容。  

    请尝试为文本段添加更多存储器、这将有助于将整个文本内容放入所配置的存储器段。

    谢谢

    Aswin

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

    尊敬的 Aswin:

    我无法共享链接器命令文件。 如果你知道,让我知道怎么做。 否则、我将文件复制粘贴到此处进行分析。

    移动数据

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

    begin:origin = 0x000000、length = 0x000002
    RAMM0:原点= 0x000123、长度= 0x0002DD
    RAMD0:原点= 0x00B000、长度= 0x000800
    RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:原点= 0x008800、长度= 0x000800
    RAMLS2:原点= 0x009000、长度= 0x000800
    RAMLS3:原点= 0x009800、长度= 0x000800
    RAMLS4:原点= 0x00A000、长度= 0x000800
    Reset:origin = 0x3FFFC0、length = 0x000002

    /*闪存扇区*/
    FLASHA:origin = 0x080002、length = 0x001FFE /*片上闪存*/
    FLASHB:origin = 0x082000、length = 0x002000 /*片上闪存*/
    FLASHC:origin = 0x084000、length = 0x002000 /*片上闪存*/
    FLASHD:origin = 0x086000、length = 0x002000 /*片上闪存*/
    FLASHE:origin = 0x088000、length = 0x008000 /*片上闪存*/
    FLASHF:origin = 0x090000、length = 0x008000 /*片上闪存*/
    FLASHG:origin = 0x098000、length = 0x008000 /*片上闪存*/
    FLASHH:origin = 0x0A0000、length = 0x008000 /*片上闪存*/
    FLASHI:origin = 0x0A8000、length = 0x008000 /*片上闪存*/
    FLASHJ:origin = 0x0B0000、length = 0x008000 /*片上闪存*/
    FLASHK:origin = 0x0B8000、length = 0x002000 /*片上闪存*/
    FLASHL:origin = 0x0BA000、length = 0x002000 /*片上闪存*/
    FLASHM:origin = 0x0BC000、length = 0x002000 /*片上闪存*/
    FLASHN:origin = 0x0BE000、length = 0x001FF0 /*片上闪存*/

    // FLASHN_RSVD:origin = 0x0BFFF0、length = 0x000010 /*根据勘误表公告“内存:在有效内存之外预取“保留并不用于代码*/

    第 1 页:

    BOOT_RSVD:origin = 0x000002、length = 0x000121 /* M0 的一部分、引导 ROM 将对堆栈使用该值*/
    RAMM1:origin = 0x000400、length = 0x0003F8 /*片上 RAM 块 M1 */
    // RAMM1_RSVD:origin = 0x0007F8、length = 0x000008 /*根据勘误表公告“存储器:在有效存储器之外预取“保留并不用于代码*/
    RAMD1:origin = 0x00B800、length = 0x000800

    RAMLS5:原点= 0x00A800、长度= 0x000800

    RAMGS0:原点= 0x00C000、长度= 0x001000
    RAMGS1:origin = 0x00D000、length = 0x001000
    RAMGS2:origin = 0x00E000、length = 0x001000
    RAMGS3:origin = 0x00F000、length = 0x001000
    RAMGS4:原点= 0x010000、长度= 0x001000
    RAMGS5:原点= 0x011000、长度= 0x001000
    RAMGS6:原点= 0x012000、长度= 0x001000
    RAMGS7:origin = 0x013000、length = 0x001000
    RAMGS8:原点= 0x014000、长度= 0x001000
    RAMGS9:原点= 0x015000、长度= 0x001000
    RAMGS10:原点= 0x016000、长度= 0x001000

    // RAMGS11:origin = 0x017000、length = 0x000FF8 /*对于 F28374D、F28376D 器件取消注释*/

    // RAMGS11_RSVD:origin = 0x017FF8、length = 0x000008 /*根据勘误表公告“内存:在有效内存之外预取“保留并不用于代码*/

    RAMGS11:origin = 0x017000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 删除其它设备上的线路。 */
    RAMGS12:origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 删除其它设备上的线路。 */
    RAMGS13:原点= 0x019000、长度= 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 删除其它设备上的线路。 */
    RAMGS14:origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 删除其它设备上的线路。 */
    RAMGS15:origin = 0x01B000、length = 0x000FF8 /*仅在 F28379D、F28377D、F28375D 器件上可用。 删除其它设备上的线路。 */

    // RAMGS15_RSVD:origin = 0x01BFF8、length = 0x000008 /*根据勘误表公告“存储器:在有效存储器之外预取“保留并不用于代码*/
    /*仅适用于 F28379D、F28377D、F28375D 器件。 删除其它设备上的线路。 */

    CPU2TOCPU1RAM:原点= 0x03F800、长度= 0x000400
    CPU1TOCPU2RAM:origin = 0x03FC00、length = 0x000400

    CANA_MSG_RAM:origin = 0x049000、length = 0x000800
    CANB_MSG_RAM:原点= 0x04B000、长度= 0x000800
    }


    很重要

    codestart:> begin、page = 0
    .text:>> RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4、页面= 0
    .cinit:> RAMM0、PAGE = 0
    .switch:> RAMM0、page = 0
    .reset:> reset、page =0、type = DSECT /*未使用、*/
    .stack :> RAMM1, page = 1.

    #if defined (__TI_EABI__)
    .bss:> RAMLS5、PAGE = 1
    .bss:output :> RAMLS3, page = 0
    .init_array:> RAMM0、page = 0
    .const :> RAMLS5, page = 1.
    .data :> RAMLS5, page = 1.
    .sysmem :> RAMLS5, page = 1.
    #else
    .pinit:> RAMM0、page = 0
    .ebss :> RAMLS5, page = 1.
    .econst:> RAMLS5、page = 1
    .esysmem :> RAMLS5, page = 1.
    #endif
    /*数字控制器库函数*/
    dclfuncs :> RAMLS4, page = 0
    dcl32funcs :> RAMLS4, page = 0

    Filter_Regs 文件:> RAMGS0、页= 1


    ramgs0:> RAMGS0、page = 1
    ramgs1 :> RAMGS1, page = 1.

    #ifdef _TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION_>= 15009000
    .TI.ramfunc:{}> RAMM0、PAGE = 0
    #else
    ramfuncs :> RAMM0 page = 0
    #endif
    #endif

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

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    组:> CPU2TOCPU1RAM、PAGE = 1

    GETBUFFER:TYPE = DSECT
    GETWRITEIDX :类型= DSECT
    PUTREADIDX :类型= 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
    Difference_Regs 文件:>RAMGS5, page = 1, fill=0x3333
    }

    /*
    //==============================================================================
    //文件结尾。
    //==============================================================================
    */

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

    您好、Prashant、  

    我可以看到  RAMLS 位置没有足够的内存来容纳文本部分。

    您是否可以尝试在文本部分使用 GSRAM 位置而不是 LS RAM。

    .text:>> RAMGS0 | RAMGS1 | RAMGS2、PAGE = 1

    尝试此操作、如果您仍然遇到问题、请告诉我。

    谢谢

    Aswin

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

    尊敬的 Aswin:

    非常感谢。  

    Prashant