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:如何检查已用 ROM/RAM 大小的大小。

Guru**** 2542590 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1327732/tms320f28379d-how-to-check-the-size-of-used-rom-ram-size

器件型号:TMS320F28379D

您好!

我想检查 使用的 ROM/RAM 大小。

我知道有内存分配窗口和映射文件、我可以在其中看到使用的 ROM 大小。

但我感到困惑、因为它们中使用的 ROM 大小不匹配。

我在任何地方都找不到用过的 RAM 大小。

那么、您能否教我如何验证已用 ROM/RAM 大小的实际值?

谢谢你。

Miura。

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

    Miura、您好!

    您能否给我提供您在 Memory Allocation 窗口中看到的内容的屏幕截图? 此外、是否有可能提供您的链接器命令文件?  这应该是 窗口拉取段的位置、因此它可能看不到这些名称。

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

    你好,Amir

    谢谢你的答复。

    下面的图片是我的内存分配窗口的屏幕截图。   它说 FlashB、D、E 由二进制闪存

      请参阅以下链接器命令文件。

    现在我的问题主要是以下的。

    存储器分配窗口是否显示使用的实际 ROM 大小?

    窗口中显示的 ROM 大小是否以"word"显示?(例如、 16位)

    3.为什么闪存是分开使用的? (在屏幕截图中、仅使用闪存 B、D、E)

    如何查看使用的 RAM 大小?

    谢谢你。

    链接器命令文件

    // The user must define CLA_C in the project linker settings if using the
    // CLA C compiler
    // Project Properties -> C2000 Linker -> Advanced Options -> Command File
    // Preprocessing -> --define
    #ifdef CLA_C
    // Define a size for the CLA scratchpad area that will be used
    // by the CLA compiler for local symbols and temps
    // Also force references to the special symbols that mark the
    // scratchpad are.
    CLA_SCRATCHPAD_SIZE = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif //CLA_C
    
    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */
    
    BEGIN : origin = 0x080000, length = 0x000002
    RAMM0 : origin = 0x000123, length = 0x0002DD
    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
    // RAMLS5 : origin = 0x00A800, length = 0x000800
    RAMLS3_5 : origin = 0x009800, length = 0x001800
    
    RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS15 : origin = 0x01B000, length = 0x000FF8 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
    // RAMGS15_RSVD : origin = 0x01BFF8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    RAMGS1TO3 : origin = 0x00D000, length = 0x003000 // RAMGS01|RAMGS02|RAMGS03
    // RAMGS01 : origin = 0x00D000, length = 0x001000
    // RAMGS02 : origin = 0x00E000, length = 0x001000
    // RAMGS03 : origin = 0x00F000, length = 0x001000
    
    RESET : origin = 0x3FFFC0, length = 0x000002
    
    /* Flash sectors */
    FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */
    FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */
    FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */
    FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */
    FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */
    FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */
    FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */
    FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */
    FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */
    FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */
    FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */
    FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */
    FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */
    FLASHN : origin = 0x0BE000, length = 0x001FF0 /* on-chip Flash */
    
    // FLASHN_RSVD : origin = 0x0BFFF0, length = 0x000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
    PAGE 1 :
    
    BOOT_RSVD : origin = 0x000002, length = 0x000121 /* Part of M0, BOOT rom will use this for stack */
    RAMM1 : origin = 0x000400, length = 0x0003F8 /* on-chip RAM block M1 */
    // RAMM1_RSVD : origin = 0x0007F8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    RAMLS0 : origin = 0x008000, length = 0x000800
    // RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, 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 = 0x000FF8 /* Uncomment for F28374D, F28376D devices */
    
    // RAMGS11_RSVD : origin = 0x017FF8, length = 0x000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    RAMGS11 : origin = 0x017000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
    EMIF1_CS0n : origin = 0x80000000, length = 0x10000000
    EMIF1_CS2n : origin = 0x00100000, length = 0x00200000
    EMIF1_CS3n : origin = 0x00300000, length = 0x00080000
    EMIF1_CS4n : origin = 0x00380000, length = 0x00060000
    EMIF2_CS0n : origin = 0x90000000, length = 0x10000000
    EMIF2_CS2n : origin = 0x00002000, length = 0x00001000
    
    CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080
    CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080
    }
    
    
    SECTIONS
    {
    /* Allocate program areas: */
    .cinit : > FLASHB PAGE = 0, ALIGN(8)
    .text : > FLASHE PAGE = 0, ALIGN(8)
    codestart : > BEGIN PAGE = 0, ALIGN(8)
    .stack : > RAMM1 PAGE = 1
    .switch : > FLASHB PAGE = 0, ALIGN(8)
    
    
    /* Allocate uninitalized data sections: */
    
    #if defined(__TI_EABI__)
    .init_array : > FLASHB, PAGE = 0, ALIGN(8)
    .bss : > RAMGS0, PAGE = 1
    .bss:output : > RAMGS0, PAGE = 1
    .data : > RAMGS0, PAGE = 1
    .sysmem : > RAMGS0, PAGE = 1
    .const : > FLASHB, PAGE = 0, ALIGN(8)
    #else
    .pinit : > FLASHB, PAGE = 0, ALIGN(8)
    .ebss : > RAMGS0, PAGE = 1
    .esysmem : > RAMGS0, PAGE = 1
    .econst : > FLASHB PAGE = 0, ALIGN(8)
    #endif
    
    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
    
    // Filter_RegsFile : > RAMGS0, PAGE = 1
    
    .em2_cs0 : > EMIF2_CS0n, PAGE = 1
    .em2_cs2 : > EMIF2_CS2n, PAGE = 1
    
    /* CLA specific sections */
    #if defined(__TI_EABI__)
    Cla1Prog : LOAD = FLASHD,
    RUN = RAMLS3_5,
    LOAD_START(Cla1funcsLoadStart),
    LOAD_END(Cla1funcsLoadEnd),
    RUN_START(Cla1funcsRunStart),
    LOAD_SIZE(Cla1funcsLoadSize),
    PAGE = 0, ALIGN(8)
    #else
    Cla1Prog : LOAD = FLASHD,
    RUN = RAMLS3_5,
    LOAD_START(_Cla1funcsLoadStart),
    LOAD_END(_Cla1funcsLoadEnd),
    RUN_START(_Cla1funcsRunStart),
    LOAD_SIZE(_Cla1funcsLoadSize),
    PAGE = 0, ALIGN(8)
    #endif
    
    // CLADataLS0 : > RAMLS0, PAGE=0
    // CLADataLS1 : > RAMLS1, PAGE=0
    
    Cla1DataRam0 : > RAMLS0, PAGE=1
    
    Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1
    CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1
    
    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    #if defined(__TI_EABI__)
    .TI.ramfunc : {} LOAD = FLASHD,
    //RUN = RAMD0,
    RUN = RAMGS1TO3,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #else
    /*
    .TI.ramfunc : {} LOAD = FLASHD,
    //RUN = RAMD0,
    RUN = RAMGS1TO3,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    */
    ramfuncs : LOAD = FLASHD,
    //RUN = RAMD0,
    RUN = RAMGS1TO3,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(4)
    #endif
    #else
    ramfuncs : LOAD = FLASHD,
    //RUN = RAMD0,
    RUN = RAMGS1TO3,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #endif
    #endif
    /*
    ramfuncs : LOAD = FLASHD,
    //RUN = RAMD0,
    RUN = RAMGS1TO3,
    LOAD_START(RamfuncsLoadStart),
    LOAD_SIZE(RamfuncsLoadSize),
    LOAD_END(RamfuncsLoadEnd),
    RUN_START(RamfuncsRunStart),
    RUN_SIZE(RamfuncsRunSize),
    RUN_END(RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    */
    
    /* The following section definition are for SDFM examples */
    // 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
    
    #ifdef CLA_C
    /* CLA C compiler sections */
    //
    // Must be allocated to memory the CLA has write access to
    //
    CLAscratch :
    { *.obj(CLAscratch)
    . += CLA_SCRATCHPAD_SIZE;
    *.obj(CLAscratch_end) } > RAMLS1, PAGE = 0
    
    .scratchpad : > RAMLS1, PAGE = 0
    .bss_cla : > RAMLS1, PAGE = 0
    .const_cla : LOAD = FLASHB,
    RUN = RAMLS1,
    RUN_START(_Cla1ConstRunStart),
    LOAD_START(_Cla1ConstLoadStart),
    LOAD_SIZE(_Cla1ConstLoadSize),
    PAGE = 0
    #endif //CLA_C
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */

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

    Miura、您好!

    (我已将链接器命令文件的内容放入代码块中以便轻松滚动、如果您希望我恢复更改、请告诉我)

    1.内存分配窗口是否显示了实际使用的 ROM 大小?

    我不确定此信息为什么是相关的、根据定义、ROM 是只读的、不能修改、因此分配了多少空间无关紧要(ROM 内容只能读取、且其 API 函数复制到 RAM)。 如果它不在链接器命令文件中、则不会在 Memory Allocation 窗口中显示。

    2.窗口中显示的 ROM 大小是否为"字"?(即 16位)

    可以。

    3.为什么闪存是以分立方式使用的? (在屏幕截图中,仅使用闪存 B、D、E)

    如果您问为什么 在有更多闪存时仅使用这3个闪存单元、这是因为它们并不是全部可用的。 如果您需要更多闪存、则可以使用它们、但是如果您 将链接器命令文件基于 TI 提供的闪存、您将看到示例通常不会占用大量空间。 此外、 对于实时应用、从闪存运行程序并不是一个好的做法、因为以任何方式访问闪存都需要等待状态。 相反、应该进行的操作是将程序存储在闪存上并根据需要将其复制到 RAM 中 执行。

    4.如何查看使用的 RAM 大小?

    我将链接器命令文件放入了我拥有的示例 CCS 工程中、并排除了工程中的其他链接器命令文件、我 在查看 RAM 大小时没有看到问题。 您可能需要验证发送给我的项目中处于活动状态的链接器命令文件是否正确。

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

    你好,Amir

    谢谢你的答复。

    现在、我了解了如何查看所使用的 ROM/RAM 大小。

    最后、请允许我补充一件事。

    我认为分配窗口中的 FLASHxx 和 RAMxx 都属于 CPU1、RINNT?


    谢谢你。

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

    您好 Toshinori、

    我认为分配窗口中的 FLASHxx 和 RAMxx 全部属于 CPU1, rignt?

    具体情况视闪存和 LSx RAM 而定。 对于 GSx RAM、 存储器的控制器可以是 CPU1或 CPU2、具体由 GSxMSEL 寄存器中的配置确定。