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/TMS320F28069:生成二进制文件

Guru**** 2524460 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/892394/ccs-tms320f28069-binary-file-generating

器件型号:TMS320F28069

工具/软件:Code Composer Studio

大家好、

我使用编译器版本 v18.12.4.LTS 和 F28069.cmd 创建一个新的 F28069项目、启用 C2000十六进制实用程序并选择二进制输出格式(--binary)、然后构建此项目并获得以下警告、

07e81ceh 中的 f28069_test.out (.cinit)段处于未配置状态

07e8000h 处的 f28069_test.out (.text)部分未配置

在 F28069.cmd 中、FLASHA 设置如下所示、hex2000似乎误解了.text 和.cinit 位于 FLASHA 原始地址的两倍的地址(0x3F4000 x 2 = 0x7E8000)。

FLASHA    :origin = 0x3F4000,length = 0x003F80

 

为了进一步评估、我使用相同的方法创建一个新的 F280049项目、毫无问题地构建这个项目并生成一个二进制文件。 我发现根本原因是闪存存储器设置的原始地址、只要.origin 地址超过0x1FFEFF、hex2000就会显示警告。

这是合理的吗? 如何解决 F28069二进制生成问题? 请提出您的想法。

谢谢、此致、

Luke

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

    请在 C28x 汇编工具手册中搜索 标题 为 TI-TXT 十六进制格式(--ti_txt 选项)的子章节。  尽管本文讨论了不同的十六进制输出格式、但所述的解决方案与二进制输出相同。  简而言之、您必须将十六进制命令文件中 ROMS 指令中的地址和长度加倍。   

    谢谢、此致、

    乔治

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

    乔治

    我在这里看到了几篇文章,建议在 ROMS 指令中将地址和长度加倍,以解决这个问题,但是当我尝试这种方法时,将 FLASHA 的地址和长度加倍,我会收到一条新的警告消息,

    存储器

    第0页:

    FLASHA   :origin = 0x7E8000、length = 0x007F00

    第1页:

    此处显示新的警告消息:

    0fd01ceh fallsin 处的 f28069_test.out (.cinit)段未配置
    0fd0000h 处的 f28069_test.out (.text)段处于未配置状态

    我是否遗漏了任何内容? 双地址/长度是否能够真正解决此问题?

    此致、

    Luke

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

    您似乎已更改链接器命令文件、而不是十六进制实用程序命令文件。  链接器命令文件不变。  只有十六进制实用程序命令文件需要将地址和长度加倍。

    谢谢、此致、

    乔治

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

    乔治

    是的、您是对的、我正在进行链接器命令文件修改、无法解决此问题。

    我使用的是 CCSv9.3、不知道如何修改十六进制实用程序命令文件、您能不能就此提供一个示例?

    谢谢、此致、

    Luke

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

    抱歉。  我忽略了您当前没有十六进制命令文件的事实。

    请从头开始、尝试这种不同的方法来解决您的问题。

    请勿对链接器命令文件进行任何更改。  请启用十六进制实用程序、或使用二进制输出格式。

    阅读 有关 CCS 中编译后处理步骤的文档。  请注意它关于创建二进制文件的示例。  使用该示例。

    谢谢、此致、

    乔治

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

    乔治

    谢谢、这种方法确实会生成.bin 文件。 我在下面还有其他问题、需要您的评论、

    • 在本例中、CCS 的二进制输出格式选项似乎无用、该选项的作用是什么?
    • 由于您的帮助、我现在可以生成二进制文件。 如果我想使用 CCS 并生成 TI-TXT 格式文件、该怎么办?
    • 当我选择 Intel 输出格式并构建这个新项目时、即使我将所有指令移动到 PAGE 0、它也会生成.hex 和.I01文件。 我应该如何使 CCS 仅生成.hex 文件?

    感谢你的帮助。

    Luke

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

    [引用 user="Luke Chen "]在本例中、CCS 的二进制输出格式选项似乎无用、此选项的作用是什么?

    编译后步骤调用的 Windows 批处理文件 tiobj2bin.bat 使用十六进制实用程序的二进制输出功能。  

    [引用 user="Luke Chen ]由于您的帮助、我现在可以生成二进制文件。 如果我想使用 CCS 并生成 TI-TXT 格式文件、该怎么办?

    删除调用 tiobj2bin.bat 的编译后处理步骤。  启用十六进制实用程序。  选择 TI-TXT 格式。  将十六进制命令文件添加到工程中。  我在该主题中的第一篇文章指向有关该命令文件内容的文档。

    请注意、作为 tiobj2bin.bat 编译后处理步骤的替代方法、您可以执行相同的操作、但使用二进制输出格式而不是 TI-TXT。

    [引用 user="Luke Chen ]当我选择 Intel 输出格式并构建此新项目时、即使我将所有指令移动到 PAGE 0、它也会生成.hex 和.I01文件。 如何使 CCS 仅生成.hex 文件?

    通常的解决方案是添加十六进制实用程序选项--romwidth=16。  要了解原因  、请在 C28x 汇编工具手册中搜索标题为了解存储器宽度的子章节。

    谢谢、此致、

    乔治

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

    乔治

    关于 TI-TXT 格式生成、我学习了工具手册、但仍然不知道如何将十六进制命令文件添加到我的 CCS 项目中。 您能否提供更多建议、如何基于这个全新的 CCS F28069项目来实现这一目标?

    感谢你的帮助。

    Luke

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

    将新的源文件添加到您的 CCS 项目中、就在您的其他源文件旁边。  在十六进制实用程序的工程编译设置中、在名为 Command-line pattern 的文本框中、添加此新文件的名称。  请注意、执行十六进制实用程序时、当前目录不是工程的根目录、而是以当前编译配置(通常为 Debug)命名的目录。  因此,要引用源文件,必须编写.\name_of 文件

    下面随附了一个屏幕截图。  在该屏幕截图中、十六进制实用程序命令文件的名称是 commands.hex。   

    谢谢、此致、

    乔治

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

    乔治

    谢谢、它现在起作用了。 此外、如果我使用命令 "${CG_TOOL_HEX}"..\commands.hex、我也可以使用此十六进制命令文件生成二进制输出格式。

    在进行进一步评估后、我在下面有两个问题、

    • 由于二进制格式是一个没有地址信息的文件、我必须在链接器命令文件中使用 fill 指令、以便链接器填充未使用区域中的数据(例如0xFFFF)、然后我们能够生成正确的二进制文件。 如果我不使用 fill 指令并选择 CCS --fill = 0xFFFF、十六进制实用程序不会填充未使用空间中的数据。 您知道原因吗?
    • 我选择 F280049创建一个新的 main.c 项目、发现我不必使用十六进制命令文件、只需使用 CCS 十六进制实用程序选项、然后我可以生成 TI-TXT 和二进制输出。 正如我在第一个帖子中提到的、似乎只要闪存地址低于0x1FFEFF、十六进制实用程序就能够在没有十六进制命令文件的情况下执行 TI-TXT 和二进制格式转换。 您对此情况有什么意见吗?

    请帮助我理解以上问题、感谢您的帮助。

    Luke

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

    [引用 user="Luke Chen ]由于二进制格式是一个没有地址信息的文件、因此我必须在链接器命令文件中使用 fill 指令、以便链接器填充未使用区域中的数据(例如0xFFFF)、然后我们能够生成正确的二进制文件。 如果我不使用 fill 指令并选择 CCS --fill = 0xFFFF、十六进制实用程序不会填充未使用空间中的数据。 您知道原因吗?[/引述]

    要解决此问题、请勿使用链接器中的填充功能。  十六进制实用程序具有称为映像模式的解决方案。  有关详细信息、请在 C28x 汇编工具手册中搜索 标题为 "图像模式"和"--fill 选项"的子章节。

    [引用 user="Luke Chen ]我选择 F280049创建新的 main.c 工程、发现我不必使用十六进制命令文件、只需使用 CCS 十六进制实用程序选项、然后可以生成 TI-TXT 和二进制输出。 正如我在第一个帖子中提到的、似乎只要闪存地址低于0x1FFEFF、十六进制实用程序就能够在没有十六进制命令文件的情况下执行 TI-TXT 和二进制格式转换。 您对此情况有什么意见吗?[/引述]

    C28x CPU 内核的地址范围为0至0x3FFFFF。  每个地址位置对应一个16位字。  当使用十六进制实用程序和 TI-TXT 或二进制输出时、地址和长度为、不是16位字、而是8位字节。  因此、地址和长度加倍。  无论是否使用 ROMS 指令(只能在十六进制实用程序命令文件中提供)、都是如此。  如果使用的最高 C28x 地址(以16位字表示)小于或等于0x1FFFFF、则这一加倍仍小于0x3FFFFF 地址范围的最大值、并且不会发出诊断。  

    谢谢、此致、

    乔治