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.

[参考译文] TMS320F28388S:armhex 实用程序不会处理段>0xFFFF 字节

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1342794/tms320f28388s-armhex-utility-does-not-handle-sections-0xffff-bytes

器件型号:TMS320F28388S

armhex 实用程序显然不会处理大于0xFFFF 字节的链接器段。 当有超过该大小的.text 时、大小会饱和到0xFFFF、并包含该段的所有数据。 结果是 无法解析的十六进制文件。

armhex 没有给出任何警告、我没有找到正确拆分段的选项。

这里是我的误差源代码中的  

CM 链接器文件:

内存
{
固件:origin = 0x00204020、length = 0x0003BFD0

部分
{
.text :>固件,PALIGN(16)

映射输出 文件:
.text 0 00204020 00010340

armhex 参数:

"C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armhex "--memwidth=8 --romwidth=8 --diag_wrap=off --ascii -o "cm.hex""cm.out"  

然后、当我尝试解析十六进制文件输出时:
块地址:0x204020;长度:0xFFFF

之后解析以下块会失败、因为十六进制文件中的长度值被截断、但十六进制文件中存在整个0x10340字节的数据。

我还尝试将固件存储器分成0xFFF0大小的块、但这不允许使用会导致其他对齐/填充问题的 PALIGN

  .text    :>>固件| FIRMWARE1 | FIRMWARE2 | FIRMWARE3, PALIGN(16)
我发现最接近的方法是定义另一个段、并将.text 的子集放入该段中、将其置于0xFFFF 字节下。
有更好的解决方案吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从命令...

    "C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armhex "--memwidth=8 --romwidth=8 --diag_wrap=off --ascii -o "cm.hex""cm.out"[/ 报价]

    ...我看到你使用 ASCII 输出格式。  有关该格式的详细信息、 请在 TI ARM 汇编工具手册 中搜索标题为  ASCII 十六进制对象格式的子章节。 数据长度不是格式的显式组成部分。  相反、长度隐含在与地址关联的数据量中。  因此,我不明白这是如何...

    [quote userid="511945" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1342794/tms320f28388s-armhex-utility-does-not-handle-sections-0xffff-bytes 这样、当我尝试解析十六进制文件输出时:
    块地址:0x204020;长度:0xFFFFF

    ...发生。

    谢谢。此致、

    -乔治

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

    十六进制输出中的数据有效载荷格式在 TI ARM 汇编工具手册中的表12-4中指定、该表由数据块列表组成。 数据的总长度不是我有问题的、因为我可以读取文件的长度。 解析各个块的长度 是我面临的问题。

    我 使用这种格式正确解析了负载、但链接器中的段 需要大于2字节的字段来指定大小的情况除外。

    在我的示例中、有一个大小(nl)为0x10340的块。 块报头将块大小(nl)饱和到0xFFFF、然后包括该块的未饱和 nl (0x10340)字节的原始数据。 这会导致 无法解析十六进制文件、因为  此文件的读取器不知道在下一个块标头之前实际上存在0x10340字节。 这是我需要的解决方案。

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

    我找到了答案。 20.2.7 armhex 具有一个新的-- boot_block_size 参数、该参数不受20.2.6版本支持。

    "c:/ti/ccs1260/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armhex -boot -gpio8 --boot_block_size=0xFFf0 -a -o "cm.hex""cm.out"