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.
工具与软件:
我们一直使用 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 . 在本例中、该地址为0。 长度的计算方法是将其所有大小相加。 第二个条目仅包含一个段。
因此、基地址和长度与该段的基地址和长度相同。
运行类似...的命令
% 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 部分之间导致该问题的空洞。
感谢你的帮助。