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.

[参考译文] 编译器/TMS320F28377D:将链接器 cmd 文件中的不同存储器段组合在一起

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/647802/compiler-tms320f28377d-combining-different-memory-sections-in-linker-cmd-file

器件型号:TMS320F28377D

工具/软件:TI C/C++编译器

您好!

我尝试组合(或)不同的存储器段以放置.text 段、但遇到以下错误。

"C:/D 驱动器/Bitbuck/c2000-tenor_AVV/testcases/MemCtrl_prot_chk_dxmem/local_RAM_lnk.cmd"、第119行:错误#10099-D:程序将无法放入可用内存中。  对齐/分块放置失败、".text"大小为0x10a6第0页。  可用存储器范围:

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

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

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

 

 我定义了如下所示的存储器部分–

 

  RAMLS0     :origin = 0x008000、length = 0x000800

  RAMLS1     :origin = 0x008800,length = 0x000800

  RAMLS2     :origin = 0x009000,length = 0x000800

 

并放置.text 段、如下所示。

 

  .text           :>> RAMLS0 | RAMLS1 | RAMLS2, PAGE = 0

 

 为什么它无法放置它。 奇怪的是、如果我将 LS0和 LS1组合到一个存储器块中、然后将其与 LS3 (下面的 lek)组合在一起、则可以正常工作。

  .text           :>> RAMLS0_LS1 | RAMLS2,  PAGE = 0

我们可以只使用或两个存储器部分吗?

此致、

Vivek Singh

 

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

    我猜您的.text 输入段大于0x800。  要了解我的意思、请参阅文章 链接器命令文件入门。  阅读前半部分、了解有关输入段的基础知识、如何将它们组合到输出段中、以及如何将这些输出段分配到存储器范围。  然后向下跳至有关分区的部分。

    谢谢、此致、

    乔治

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

    乔治

    很抱歉假期后再看一次。 是的、.text 大于0x800、这就是我合并更多 RAM 来分配.text 的原因。

     .text       :>> RAMLS0 | RAMLS1 | RAMLS2, PAGE = 0

    这应按照本Wiki 页面上的说明进行操作

    这适用于旧编译器、但不适用于最新编译器。 因此、在最新编译中发生了一些变化。

    此致、

    Vivek Singh

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

    [引用 user="Vivek Singh"]

    是的、.text 大于0x800、这就是我合并更多 RAM 来分配.text 的原因。

     .text       :>> RAMLS0 | RAMLS1 | RAMLS2, PAGE = 0

    这应按照本Wiki 页面上的说明进行操作

    [/报价]

    您需要分配更多的 RAM、但这种方法不会这样做。  您分配了更多的存储器范围、并将段拆分在它们之间。  但请记住、段拆分绝不会拆分输入段。  输入段通常是来自单个目标文件的.text 段。  在您的情况下、一个.text 输入段比任何一个存储器范围都大。  因此,您需要将内存范围组合在一起,就像这样...

    RAMLS0_LS1_LS2:origin = 0x008000、length = 0x800 * 3.
    

    然后将.text 分配到该文件中...

    .text > RAMLS0_LS1_LS2、第0页 

    谢谢、此致、

    乔治

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

    相同的链接器 cmd 文件在旧版编译中工作正常。

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

    对于较旧的编译器、.text 输入段可能不会大于0x800。  是这样吗?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定这一点、但如果错误具体提到哪个部分不合适、那将会有所帮助。 现在它只是说.text 不能适应。 您是否在最后尝试过此操作? 我应该向您发送我正在使用的项目吗?

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

    另一种考虑方法... 与段拆分结合使用、使用编译器选项 -gen_func_subsections 进行编译。  请在 C28x 编译器手册中阅读有关该选项的信息。  它将使输入段更小、因此段拆分将更有效。

    [报价用户="Vivek Singh"]我是否应该向您发送我正在使用的项目?

    如果最后一项建议不起作用,则是的。

    谢谢、此致、

    乔治