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.

[参考译文] 编译器:.bin 生成的 CCS 设置

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/650094/compiler-ccs-settings-for-bin-generation

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

我需要从我的 CCS 工程(特别是 F28M3x)自动生成.bin 文件、直到现在、我通过一个容易出错的手动过程执行此操作。

我知道 CCS 已经包含了实现此目的所需的工具、但我还没有找到有关如何将其用于我的目的的完整指南、只是几个旧的线程。

从 F29M3x 的 ARM 内核开始、前一位同事当前设置的过程如下:

  1. 使用命令"${CG_TOOL_HEX}"-i "${BuildArtifactFileName}"-o "${BuildArtifactFileBaseName}.hex"生成具有编译后步骤的.hex 文件-订购 MS -romwidth 32


  2. 运行 Jacques Pelletier 的 HEX2BIN v1.0.1、将.hex 转换为.bin

我正在尝试使用最新 CCS 版本中的 ARM 十六进制实用程序集成来实现上述自动化。首先、我尝试使用 ARM 十六进制实用程序集成来仅生成十六进制文件、 但是、生成的文件具有光石字节序、除非我将 memwidth 和 romwidth 设置为8、在这种情况下、某些块不与32位地址对齐。

对于.bin 文件、我从其他不完整的线程收集、需要使用未记录的-b 选项。 但是 、此选项未在汇编工具手册中列出、并且有关此选项的信息极少。

我将不断尝试并发布任何进展、但我希望获得更多经验丰富的用户的帮助。

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

    查看直接使用 ARM 十六进制实用程序(-b 选项)生成.bin、我遇到以下问题:如果我不使用-image 选项、则生成的.bin 文件包含非连续数据、即无法将其直接编程到闪存中。 为了解决此问题、我理解我必须使用-image 选项、但这会引入另外两个问题:

    1. 我必须使用十六进制实用程序的 ROMS 信息创建配置文件。 该文件本质上会复制链接器命令文件中已存在的信息、因此更改链接器命令文件意味着十六进制实用程序配置可能也需要更新。 如果正确完成、则需要额外的工作、否则(或根本未完成)会导致错误。
    2. 在所使用的 ROMS 指令中、我将必须定义可用于程序代码的整个闪存区域(如链接器命令文件中已设置的那样)、 与-image 选项结合使用意味着生成的.bin 文件将包含所有闪存的填充值、即始终具有闪存程序区域的最大大小。 这是因为-image 选项会使十六进制实用程序不仅填充代码段之间的空洞、还会填充前后的空洞。 (我现在使用的 HEX2BIN 实用程序似乎只填充段之间的孔洞、即创建最小连续.bin 文件)。 因此、在每次固件更新时、我都必须上载比实际所需文件大(可能大得多)的文件。

    我很想知道是否可以使用十六进制实用程序来处理上述问题、因为我更喜欢将其用于长期解决方案而不是第三方工具。

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

    您是否查看了 F28M35x 器件 TRM (www.ti.com/.../spruh22h.pdf)的第6.8.1.1节 、我已经介绍了在 CCS 中创建用于 M-Boot ROM 的 bin 文件的步骤。 您可以使用相同的命令从闪存的输出文件中生成 bin 文件。

    请告诉我、如果可以、如果不能、我们可以将论坛帖子移至工具团队、以便帮助您处理您正在做的事情?


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

    您好、Santosh、

    我不知道 TRM 中有此信息、因此感谢您的参与!

    我在 ARM M3项目中尝试了编译后处理步骤、生成的.bin 文件与当前进程创建的文件完全相同、但编译后处理步骤的填充值为0xFF、HEX2BIN v1为0x00。 我通过更新到 HEX2BIN v2来验证了这一点 、该版本允许更改填充值。

    在阅读您的回复之前、我还设法使用 CCS 中的 ARM 十六进制实用程序集成来获得正确的结果、方法是手动添加"-" 将 MS"订购到 armhex 标志、这使 CCS 生成的 armhex 命令等同于我之前用作编译后处理步骤的硬编码命令、即具有以下标志(通过 CCS 中的 ARM 十六进制实用程序属性进行设置):

    --romwidth=32 --Intel --order MS 

    M3端似乎已经解决了、并提供了2种解决方案、即 armhex + HEX2BIN 或 tiobj2bin.bat。

    接下来是 C28部分、我到目前为止的过程是通过 JTAG 对芯片进行编程、并将闪存读回.bin 文件。 我尝试了相同的编译后处理步骤、但它不起作用、抱怨缺少 ARM 可执行文件。 因此、我尝试使用 C2000 hex 实用程序(hex2000.exe)和 HEX2BIN 匹配.bin 文件的正确格式、并以 hex2000的以下标志结束(通过 CCS 中的 C2000 hex 实用程序属性进行设置):

    --romwidth=16 --swapbytes--intel 

    对于十六进制到二进制转换、我必须将 HEX2BIN 更新为较新版本(在上面链接)、该版本通过"-a"选项支持16位字。

    希望这对其他人有所帮助、尽管我认为这些信息应该在 Wiki 中提供

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Giannis、
    这一点很有帮助、感谢您的澄清和提供的信息。 我会将您的反馈标记为由团队查看。

    此致
    Santosh Athuru