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/TMS320F28377D:处理 CMD 文件以分配更大的变量:错误#10099-D:程序将无法放入可用存储器中。

Guru**** 2611705 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/646614/ccs-tms320f28377d-working-on-cmd-file-to-allocate-a-larger-variable-error-10099-d-program-will-not-fit-into-available-memory

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

您好!

您能否建议一种分配较大变量的常用方法?

在*。cmd 文件中编辑 MEMORY 指令是否必要?


易失性 uint16 abc[0x1100];


数组 abc[]的大小为0x1100字。
我的客户希望在 RAMGS5 (Addr=0x11000)分配阵列。


如果未编辑*。cmd、则会生成链接器错误:



"./2837xD_RAM_lnk_CPU1_edit.cmd"、第70行:错误#10099-D:程序将不会
  存储器中。  对齐/分块的运行放置失败
  部分".ebss"大小0x110d 第1页。  可用存储器范围:
  RAMGS5      大小:0x1000      未使用:0x6       最大孔:0xT6
  RAMGS6      大小:0x1000      未使用:0x1000      最大孔:0x1000
  RAMGS7      大小:0x1000      未使用:0x1000      最大孔:0x1000    
错误#10010:链接期间遇到错误;
  未构建"Blinky_cpu01_edit02_Linker_01.out"

>>编译失败
Makefile:151:目标'blinky_cpu01_edit02_Linker_01.out'的配方失败
gmake:***[blinky_cpu01_edit02_Linker_01.out]错误1.
gmake:目标"全部"不会由于错误而重新生成。

以下*。cmd 编辑可清除链接器错误、以准备更大的存储器范围:

#define edit 1.

存储器

第1页:

#if 编辑//成功
  RAMGS5     :origin = 0x011000,length = 0x003000
else//原件
  RAMGS5     :origin = 0x011000,length = 0x001000
  RAMGS6     :origin = 0x012000,length = 0x001000
  RAMGS7     :origin = 0x013000,length = 0x001000
#endif



部分


  .ebss           :> RAMGS5,   PAGE = 1


我们正在开发 SPRU513 8.5.5.6 ~ 8.5.5.7。

8.5.5.6 使用多个存储器范围进行分配
μ~将整个 A 段分配到指定的存储器范围中。

8.5.5.7在非连续存储器范围之间自动拆分输出段
~、以便拆分段以适合。

/cfs-file/__key/communityserver-discussions-components-files/81/2837xD_5F00_RAM_5F00_lnk_5F00_cpu1_5F00_edit.cmd.txt

/cfs-file/__key/communityserver-discussions-components-files/81/blinky_5F00_cpu01.c

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

    就编译器和链接器而言,这...

    [引用 user="Hideaki Nambu"]#if edit //成功
      RAMGS5     :origin = 0x011000,length = 0x003000
    else//原件
      RAMGS5     :origin = 0x011000,length = 0x001000
      RAMGS6     :origin = 0x012000,length = 0x001000
      RAMGS7     :origin = 0x013000,length = 0x001000
    #endif[/quot]

    (笑声) 是一个很好的解决方案。   

    尽管如此、我不知道该链接器命令文件为什么会使用3个单独的存储器范围、而可以使用其中一个。  可能有一个原因与硬件限制有关。  我建议您在 C2000论坛中提问。 或者、如果您愿意、我可以将此主题移至该论坛。

    谢谢、此致、

    乔治

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

    乔治

    感谢您的回复。

    我想关闭。

    >>尽管如此、我不知道该链接器命令文件为什么会使用3个单独的存储器范围、而可以使用其中一个。

    我认为这一点很有用。 只要我知道 CPU1和 CPU2之间共享 RAMGSx、  0x1000是 用于设置所有者 CPU #的边界。