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.

[参考译文] TMS320F2800137:关于 F2800137、我对缺少 RAM 和闪存有问题

Guru**** 2794745 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1619955/tms320f2800137-i-have-a-issue-about-the-missing-ram-and-flash-about-f2800137

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

大家好、TI 的专家

我正在使用 TI 的 C2000 DSP、其特定器件型号为 F2800137RHBR。我开发了一个几乎适合两口的工程。

最近、当堆栈出现问题时、我会遇到一个问题。 当我使用 vsnprintf 函数重新定义并使用 USB SCIA 打印调试 MSG 时。

我将栈大小设置为 0x400(稍后设置为 0x4F8)、printf 功能首先可以在 RAM 模式下正常工作。 但随着代码大小的增加、它不再以相同的方式工作。

错误 MSG 如下所示:

[14]"../280013x_generic_ram_lnk.cmd", line 44: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment/blocking fails for section ".text" size 0x4335 page 0.  Available memory ranges:
[15]   RAMLS0       size: 0x2000       unused: 0x1          max hole: 0x1
[16]   RAMLS1       size: 0x1ff8       unused: 0x0          max hole: 0x0
 
另外、.map 文件也会发现原因是.text 文件超出了 RAM 大小
 
.text.1    0    00000000    0000120f     FAILED TO ALLOCATE
 
为了进一步说明这一点、我发现分配了 RAM 的 RAM cmd 文件、但有问题---- TI 官方网站说、具有 36KB RAM 和 256kb 闪存的 2800137 芯片、但对 cmd 文件 进行编码、只有 36KB RAM 和 256kb 闪存的一半、所以我想知道原因以及如何修复它、以便 RAM 可以在 RAM 模式下包含我的文本代码。
 
CCS 版本为版本:20.4.1.4___1.10.1  
C2000Ware 版本:C2000Ware v6.00.01.00
 
由于无法上传 280013x_generic_ram_lnk.cmd 文件、因此代码如下所示:

MEMORY
{
   BEGIN            : origin = 0x00000000, length = 0x00000002
   BOOT_RSVD        : origin = 0x00000002, length = 0x00000126

   RAMM0            : origin = 0x00000128, length = 0x000002D8
   RAMM1            : origin = 0x00000400, length = 0x000003F8
   // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

   RAMLS0           : origin = 0x00008000, length = 0x00002000
   RAMLS1           : origin = 0x0000A000, length = 0x00001FF8
   // RAMLS1_RSVD      : origin = 0x0000BFF8, length = 0x00000008

   RESET            : origin = 0x003FFFC0, length = 0x00000002

   /* Flash sectors */
   FLASH_BANK0_SEC_0_7     : origin = 0x080002, length = 0x1FFE  /* on-chip Flash */
   FLASH_BANK0_SEC_8_15    : origin = 0x082000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_16_23   : origin = 0x084000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_24_31   : origin = 0x086000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_32_39   : origin = 0x088000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_40_47   : origin = 0x08A000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_48_55   : origin = 0x08C000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_56_63   : origin = 0x08E000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_64_71   : origin = 0x090000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_72_79   : origin = 0x092000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_80_87   : origin = 0x094000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_88_95   : origin = 0x096000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_96_103  : origin = 0x098000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_104_111 : origin = 0x09A000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_112_119 : origin = 0x09C000, length = 0x2000  /* on-chip Flash */
   FLASH_BANK0_SEC_120_127 : origin = 0x09E000, length = 0x1FF0  /* on-chip Flash */

   // FLASH_BANK0_SEC_127_RSVD : origin = 0x09FFF0, length = 0x0010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
}

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

    您好 Feng、

    我看到您已将.text 段映射到 RAMLS0、LS1、其总长度为 3FF8、但我看到您放入.text 段的数据 大小为 0x4335、这无法容纳当前的 RAMLS0_1。 我建议您使用 FLASH 部分来存储.text 文件。 请查看 f280013x 器件的通用闪存链接器 cmd 文件、位置为-C2000Ware_6_00_01_00\device_support\f280013x\common\cmd

    TI 官方网站上说、具有 36KB RAM 和 256kb 闪存的 2800137 芯片、但与 cmd 文件相匹配、只有 36KB RAM 和 256kb 闪存的一半

       您能给我指一下这个文档吗?

    谢谢

    Aswin

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

    您好、 Aswin

    感谢您的答复。

    我知道它可以在闪存模式下工作、但在 RAM 中运行代码比在 RAM 模式下使用 XDS110 进行调试要快得多。 所以我想摆脱这个问题。

    关于 RAM 和闪存的容量、请参阅以下链接:

    https://www.ti.com/product/TMS320F2800137?keyMatch=TMS320F2800137&tisearch=universal_search&usecase=GPN

    该网站清楚地说明了芯片的 RAM 和闪存容量

    从 cmd 文件中、 280013x_generic_ram_lnk.cmd 或 280013x_generic_flash_lnk.cmd 包含在中:

    C:\ti\c2000\C2000Ware_6_00_01_00\device_support\f280013x\common\cmd(我无法将文件上传到 TI 的服务器,如图像和文件)

    仅有近 18KB 的 RAM 和 128KB 的闪存。

    应届毕业生。

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

    您好 Feng、

    为了进一步说明这一点、我发现分配 RAM 的 RAM cmd 文件、但存在问题---- TI 官方网站说、具有 36KB RAM 和 256kb 闪存的 2800137 芯片、但与 cmd 文件相匹配、只有一半的 36KB RAM 和 256kb Flash

    RAMLS0_LS1 的总大小为 0x4000、即 32KB + 4KB RAMM0_1、总共为 36Kb。这与 TRM 和链接器 cmd 文件相匹配。

    每个块的闪存大小为 0x2000、为 16KB、总共有 16 个块(扇区组)、总大小为 256KB、这也与 TRM 和链接器 cmd 文件一致。

    谢谢

    Aswin

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

    Aswin、ć

      0x4000 Capatity 意味着有 4 x 16^3 = 16,384 = 16KB、这是我理解 RAM 计算的方式、是正确的

      我要求 AI 确保容量、AI 告诉我 cmd 文件的容量也是 16KB

    此致。

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

    Feng、

    C2000 中的每个字都是 16 位(2 个字节)。 因此、总字节数为 16,384 个字 x 2 个字节/字、即 32KB。  

    谢谢

    Aswin

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

    Aswin

      如果我能理解这样的问题、这意味着包含 RAM 的 cmd 文件的长度实际上为 0x4000、大约为 16k、但 C2000 的 RAM 为 16 位、这意味着它是 16k 字、即 32k 字节。

      谢谢。此致。

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

    Feng、是的、您是对的