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.

[参考译文] CC2340R5:通过 IAR 生成 CRC 与编译后操作 ielftool

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1524904/cc2340r5-crc-generation-via-iar-vs-post-build-actions-ielftool

器件型号:CC2340R5

工具/软件:

您好:

我尝试理解在 IAR 中生成校验和与默认随工程文件提供的编译后处理操作之间的区别、即 Project Options > Linker > Checksum > Generation Checksum。  

设置信息:

  • IAR v9.60.2
  • SimpleLink 低功耗 F3 SDK v8.10.01.02
  • 基于"basic_ble_profiles"示例工程的当前工作区。  

某些上下文:

我使用这款芯片组开发了不到一年的时间、并注意到如下所示的异常但非严重(味道)错误、这始终与 ielftool 校验和生成有关。 在重新编译固件时随机发生错误、似乎不依赖于源代码、通常当错误发生时、再次重建固件将导致错误消失。 最近、我决定研究这个问题、发现它与项目文件标配的编译后链接器操作有关、如下所示:

  1. "$Toolkit_DIR$CRC"/bin/ielftool -- checksum "__ccfg_boot_cfg_CRC32_end+1:4、CRC32:1mi、0xFFFFFFFF;__ccfg_boot_cfg_CRC32_begin-__ccfg
  2. "$Toolkit_DIR$CRC"/bin/ielftool --ihex --checksum "__ccfg_boot_cfg_CRC32_end+1:4、CRC32:1mi、0xFFFFFFFF;__ccfg_boot_cfg_begin-__ccfg_cfg_cfg_end"
  3. ielftool --ihex --verbose $TARGET_BPATH$.out $TARGET_BPATH$.hex

我已确定、当错误发生时、CRC 未正确放置在.hex 文件和/或生成的相应.out elf 文件中、具体取决于发生了哪种错误。 在这种特定的错误发生,我搜索了内存大小和文件大小的高低,找不到任何类似的. 我阅读了几篇在线文章、其中提到可以通过 IAR 工程配置选项生成 CRC、但我想了解:

  1. 将这些"编译后链接器操作"作为工程的一部分、其目的是什么?
  2. 为什么上面 ielftool 中的3个 CRC 仅在 CCFG 的一小部分计算 CRC、而不是在映像的整个部分(如引导加载程序或整个映像)计算 CRC?  
  3. 如果我现在的唯一意图是为固件映像、引导加载程序甚至另一个用户映像生成 CRC、那么使用编译后链接器操作而不是 IAR 的内置 CRC 生成器是否有好处?  

我对了解链接器脚本和 CRC 生成知之甚少、因此、有关此问题的任何指导或意见都将不胜感激。 我们的项目仍处于开发的早期阶段、因此目前出于保密原因、我故意不共享任何源代码或输出文件(因为错误似乎与源代码本身无关)。 我很乐意根据需要共享(的一部分)项目文件或任何其他设置配置、以便更好地理解这些问题。

下面的错误因编译后链接器操作失败(0、1或2)而异:

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

    您好 Justin、

    这可能是 IAR 版本问题、因为8.10 F3 SDK 根据版本说明建议使用 IAR 版本9.50.2 (有时使用较新版本的 IAR 会导致较旧工程无法工作)。  

    谢谢、
    Alex F