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:将库函数添加到 GROUP 不会更改大小-第2部分

Guru**** 2609285 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1063973/tms320f28379d-adding-library-functions-to-group-doesn-t-change-the-size---part-2

器件型号:TMS320F28379D

我不小心用相同的标题关闭了原始线程。  我已经将所有内容复制到这个新线程中、并添加了一些新信息...

您好!

我有一个包含许多函数的库、其中一些函数必须从 RAM 运行。 除此之外、还有一些其他函数使用库、还有一些函数由库使用、还必须从 RAM 运行。 在 cmd 文件中、我对这两个文件都使用单个 GROUP。 当我将代码加载到 RAM 中时、我可以看到库外部的函数就在那里。 但是、添加库函数时、_size  不会更改。 但是、映射文件显示链接器已为库函数分配 RAM 地址。 因此、尺寸似乎是唯一的问题。 我确信我无法正确理解某些内容。

新信息

我添加了更多库函数、在检查映射文件后、我可以看到所有函数都存在于闪存中、并且 RAM 中已分配足够的空间。  但是、无论我从库中添加了多少个函数、_size 都不会改变。  该值是 SectionName 中所有内容的大小。

文件设置如下:

ExternalFunctions.cpp:

每个将从 RAM 运行的函数都在'#pragma CODE_SECTION (“SectionName”)之前

CMD 文件:

library.cmd

部分

LibrarySectionName:load=module_code、run=RAM

--library=libraryname.lib (.text:_Function0)

project.cmd

#include“library.cmd”

部分

SectionName

LibrarySectionName

} LOAD = MODULE_CODE、PAGE = 0、PALIGN (8)

运行= RAM、

load_start (_StartAddr)、

load_size (_size)、

run_start (_RunAddr)

谢谢、

ED

应该更加明确。 size 中的值未更改。

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

    您好!  

    将您的查询转发给编译器团队。  

    此致

    Siddharth

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

    有关在 C 或 C++代码中引用由链接器创建的符号(如_size)的正确方法的详细信息、 请在 C28x 汇编工具手册中搜索 标题为 在 C/C++应用程序中使用链接器符号的子章节。

    目前、该手册的常用链接不起作用。  下面 是一个替代链接

    请告诉我此建议是否解决了问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    我在获取_size 中的值时没有遇到任何问题。  代码看到且正在使用的值与映射文件中的值相同。  问题是链接器生成的值太小。  它完全由 LibrarySectionName 的大小关闭。  链接器在 RAM 中为其分配了一个位置、但未将其添加到_size、这让我感到困惑。

    另一个线索...  自从我开始这个线程以来、我添加了第三个段名。  size 值是新段的大小加上 SectionName 的大小、但不包括 LibrarySectionName 的大小。  因此、我怀疑我没有正确声明 LibrarySectionName。  我是否需要向其中添加其他字段(load_size 等)?

    谢谢、

    ED

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

    在仔细检查您的第一篇帖子后、我发现了我之前错过的内容。  我不确定这是问题的原因。  但我有足够的信心让你尝试一下。

    只需一次即可构成输出段 LibrarySectionName。  这必须在集团内部发生。  接受此代码...

    [引用 userid="366241" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1063973/tms320f28379d-adding-library-functions-to -group-does-tchange-the-size---part-2"]

    LibrarySectionName:load=module_code、run=RAM

    --library=libraryname.lib (.text:_Function0)

    [/报价]

    删除 load=和 run=规范。  然后,将其移到组中,以代替此行...

    [引用 userid="366241" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1063973/tms320f28379d-adding-library-functions-to-group-doesn-t-change-the-size---part-2"引用]

    请告诉我此建议是否解决了问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    这是正常工作的!!  我所知的漏洞是什么?

    谢谢、

    ED

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

    请阅读文章 链接器命令文件入门的第一部分。  重点学习术语 输出部分。  无论输出段是否是 GROUP 的一部分、都只能指定一次。  如果它在组中、则不允许分配规范、因为它从 分配继承这些规范。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    我读了这段内容、我认为我理解了从输入段创建输出段的过程。 我还重新阅读了您刚才所说的内容、如果我正确解释了所有内容、将 LibrarySectionName 放在 GROUP 中会使链接器按该名称创建新段。 该新段的大括号内是库所需的部分。 是这样吗?

    谢谢、

    ED

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="366241" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1063973/tms320f28379d-adding-library-functions-to-group-doesn-t-change-the-size---part-2/3937840]是否正确?

    是的。  乔治

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

    很棒!  感谢 George 的帮助。

    ED