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.

[参考译文] ARM-CGT:TI Clang tiarmhex 实用程序无法生成阵列输出

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1398697/arm-cgt-ti-clang-tiarmhex-utility-unable-to-produce-array-output

器件型号:ARM-CGT
主题中讨论的其他器件:CC1314R10

工具与软件:

我们一直使用 TI-ARM-CGT v20.2.7 LTS 中的 ARM 十六进制实用程序生成一个嵌入到我们的主程序中的数组、以便实现无线更新。 这一直很好。

如果我们现在正在使用 simplelink_cc13xx_cc26xx_sdk_7_41_00_17以及 TI Clang v3.2.2.LTS 实施新项目、则我们想继续使用我们的现有系统进行无线更新。

不过、ARM 十六进制实用程序永远不会完成转换、而是似乎在输出文件无限增长的情况下向数组添加无穷无尽的0x00流。

可以使用 SDK 示例中的"empty_LP_EM_CC1314R10_tirtos7_ticlang"示例来重现该问题、并启用 ARM 十六进制实用程序来生成数组。

如有任何帮助、将不胜感激。

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

    尊敬的 Pascal:

    请不使用 Arm Hex 实用程序、而是在 CCS -> Project Properties -> CCS Build -> Steps 中添加以下编译后处理步骤:

    ${CG_TOOL_ROOT}/bin/tiarmhex -order MS --memwidth=8 --romwidth=8 --Intel -o ${BuildArtifactFileBaseName}.hex ${BuildArtifactFileBaseName}  

    此致、
    Ryan

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

    您好、Ryan、

    感谢快速响应。 然而,正如我在我的 OP 中提到的,我们试图使用十六进制工具中的--array 输出。

    将您的命令调整为使用--array 并将其添加为编译后步骤会导致同样的问题。

    ${CG_TOOL_ROOT}/bin/tiarmhex -order MS --array -o ${BuildArtifactFileBaseName}.hex ${BuildArtifactFileBaseName}

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

    十六进制实用程序仅处理已初始化的段、例如 .text .  所有其他部分都会被忽略。  高得多 -- array 格式中、已初始化段之间的任何空洞都会用0填充。  无论孔的大小如何、都会出现这种情况。  在这种情况下、端部之间会出现一个非常大的孔 .cinit 部分和的开头 .ccfg 首选。  用0填充这个大孔需要很长的时间,你认为 tiarmhex 挂起并在它完成之前将其杀死。   

    解决方案是提供 A ROM 指令类似于...

    /* roms_directive.txt */
    
    ROMS
    {
        name1 : origin = 0x00000000, length = 0x457c
        name2 : origin = 0x50000000, length = 0x7c
    }

    请参阅 ROMS 指令的文档。 我给每个条目一个非常模糊的名字。  将这些名称更改为有意义的名称。

    下面介绍了如何确定要用于每个条目的值。  检查链接器映射文件。   使用标题为的部件  部分分配映射 .  查看每个输出部分。  忽略已标记的段  未初始化  或者  DSECT 或的长度为0字节。  对于其余部分、根据它们之间的距离将它们组合成松散的组。  请注意每个组的起始地址和长度。  在本例中、我将这些段合并为第一个条目。

    • .resetVecs
    • .text
    • .rodata
    • .args
    • .cinit

    基地址与相同 .resetVecs .  在本例中、该地址为0。  长度的计算方法是将其所有大小相加。  第二个条目仅包含一个段。

    • .ccfg

    因此、基地址和长度与该段的基地址和长度相同。

    运行类似...的命令

    % tiarmhex --array -o empty_LP_EM_CC1314R10_tirtos7_ticlang_array.c roms_directive.txt empty_LP_EM_CC1314R10_tirtos7_ticlang.out

    在文件中创建了两个数组  empty_LP_EM_CC1314R10_tirtos7_ticlang_array.c .  该文件中不存在每个数组的基地址。  必须以其他方式保持这一细节。

    谢谢。此致、

    -George.

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

    您好、George:

    您完全同意代码和.ccfg 部分之间导致该问题的空洞。

    感谢你的帮助。