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.

[参考译文] TMS320F28386S:链接器未将数据放入段中

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1290761/tms320f28386s-linker-not-putting-data-into-sections

器件型号:TMS320F28386S
主题中讨论的其他器件:TMS320F28379D

您好!

我将代码从 TMS320F28379D 项目移植到 TMS320F28386S。  一些代码定义了包含某种类型数据的段。  除一个指令外、所有其他指令都未能显示在映射文件和链接器的输出中。  一个例外是来自包含代码的汇编文件的段。  缺失的部分来自 cpp 文件。  我正在生成列表文件、以便可以看到缺少的数据在那里。  因此、我假设文件已正确编译、数据位于目标文件中。

在映射文件中、可以在 MEMORY_CONFIGURATION 区域看到 SECTIONS 的空间。  但是、段名及其关联的目标文件不会显示在 section_allocation _map 中。  为了确定它们确实不在输出中、我将让 C2000十六进制实用程序生成 TI-TXT 文件。  生成的文件不包含此数据。

我将 CCS 10.4.0.0006与编译器版本 TI v20.2.5.LTS 一起使用。

CPP 文件如下所示、其中一些为数组:

#pragma DATA_SECTION (" ")

常量结构 结构名称=

  {

  ,

  ,

  

  };

cmd 文件如下所示:

内存

{

  PAGE0:

     : origin=0x12345, length=6

部分

{

   :>   ,PAGE = 0

为了使输出显示在其中、我还需要做其他什么吗?

谢谢!

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

    是否有一个 C 函数读取 StructName 中的字段?

    Unknown 说:
    我要将代码从 TMS320F28379D 项目移植到 TMS320F28386S

    我需要查看这两个工程编译的详细信息。 对于其中一个 TMS320F28379D 项目、请重新编译整个项目。  一种方法是右键单击项目名称、然后选择 重建项目 。  然后将"Console"(不是"Problems")视图的内容保存到文本文件。  使用名为的图标 复制构建日志 (较早版本的 CCS)或 将构建日志保存到文件 (CCS 的更新版本)。  当您为日志文件命名时、请确保使用文件扩展名 .txt 。  请对 TMS320F28386S 工程重复这些步骤。   请  在下一篇文章中附加两个文本文件。  如果您不愿意附加构建日志、 可以将它们秘密发送给我。 将鼠标悬停在我的屏幕名称或形象秀上。 将弹出一个框。 单击  发送私密消息 。  将文本文件附加到该消息。

    谢谢。此致、

    -乔治

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

    感谢您通过私人消息发送构建日志。  这些示例显示旧工程使用 COFF ABI、而新工程使用 EABI。  你也说,这个问题的答案...

    是否有 C 函数可读取 StructName 中的字段?

    ... 是否。  在这种情况下、解决方案是应用 #pragma retain( 符号 ) __attribute__(retain) 结构名称 。  有关更多详细信息、请参阅  较大文章 C2000从 COFF 迁移到 EABI 中的条件链接:部分删除或保留部分

    谢谢。此致、

    -乔治

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

    您好、George、

                   感谢您提供指向迁移页面的链接。  它还解释了我遇到的与主要下划线有关的问题。

                   但是、我不了解#pragma retain 的语法。  当我使用它时、我收到一个编译错误、显示错误#18:预期为")"。  创建结构如下所示。  在本例中、我使用了其中一个表。  我曾尝试过一些不同的主题、包括使用单引号、但始终会导致编译失败。  还需要什么?

    #pragma DATA_SECTION ("MyDataSection")

    #pragma retain ("MyDataSection")

    const uint16 MyTable[ ]=...

    谢谢!

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

    C2000迁移文章中存在错误。  为 #pragma Retain 不应用于段、而是应用于 C 符号(函数或数据)。  因此,写...

    #pragma RETAIN(MyTable)

    谢谢。此致、

    -乔治

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

    我尝试了同样的结果。  我还将其放在表声明之前和之后。

    谢谢!

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

    请在 C28x 编译器手册 中搜索标题为 "Retain Pragma "的子章节。  这里可能有一些详细信息会有所帮助。

    或者、使用 __attribute__(retain) 但是。   

    这是 C 代码还是 C++代码?

    谢谢。此致、

    -乔治

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

    __attribute__(retain)已成功!  有什么想法,为什么需要它的388 ,而不是379 ?

    谢谢!

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

    我不知道。  要解决这一问题、请将文件恢复到无法构建的状态、然后 按照 如何提交编译器测试用例一文中的说明进行操作

    谢谢。此致、

    -乔治

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

    哦,等等。。。

    为什么需要388而不是379?

    你是不是想问为什么 保留 数量是多少?  因为在 EABI 中、未引用代码的任何部分都会自动删除。

    我也要在感恩节休息时离开。  任何进一步的答复都将被推迟。

    谢谢。此致、

    -乔治

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

    我的问题。  假期愉快!

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

    BTW。  我阅读了上面建议的文档、C++的语法就是#pragma retain - no argument。  那么、现在这也在发挥作用!

    谢谢你的帮助乔治。