工具/软件:
您好:
我尝试理解在 IAR 中生成校验和与默认随工程文件提供的编译后处理操作之间的区别、即 Project Options > Linker > Checksum > Generation Checksum。
设置信息:
- IAR v9.60.2
- SimpleLink 低功耗 F3 SDK v8.10.01.02
- 基于"basic_ble_profiles"示例工程的当前工作区。
某些上下文:
我使用这款芯片组开发了不到一年的时间、并注意到如下所示的异常但非严重(味道)错误、这始终与 ielftool 校验和生成有关。 在重新编译固件时随机发生错误、似乎不依赖于源代码、通常当错误发生时、再次重建固件将导致错误消失。 最近、我决定研究这个问题、发现它与项目文件标配的编译后链接器操作有关、如下所示:
- "$Toolkit_DIR$CRC"/bin/ielftool -- checksum "__ccfg_boot_cfg_CRC32_end+1:4、CRC32:1mi、0xFFFFFFFF;__ccfg_boot_cfg_CRC32_begin-__ccfg
- "$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"
- ielftool --ihex --verbose $TARGET_BPATH$.out $TARGET_BPATH$.hex
我已确定、当错误发生时、CRC 未正确放置在.hex 文件和/或生成的相应.out elf 文件中、具体取决于发生了哪种错误。 在这种特定的错误发生,我搜索了内存大小和文件大小的高低,找不到任何类似的. 我阅读了几篇在线文章、其中提到可以通过 IAR 工程配置选项生成 CRC、但我想了解:
- 将这些"编译后链接器操作"作为工程的一部分、其目的是什么?
- 为什么上面 ielftool 中的3个 CRC 仅在 CCFG 的一小部分计算 CRC、而不是在映像的整个部分(如引导加载程序或整个映像)计算 CRC?
- 如果我现在的唯一意图是为固件映像、引导加载程序甚至另一个用户映像生成 CRC、那么使用编译后链接器操作而不是 IAR 的内置 CRC 生成器是否有好处?
我对了解链接器脚本和 CRC 生成知之甚少、因此、有关此问题的任何指导或意见都将不胜感激。 我们的项目仍处于开发的早期阶段、因此目前出于保密原因、我故意不共享任何源代码或输出文件(因为错误似乎与源代码本身无关)。 我很乐意根据需要共享(的一部分)项目文件或任何其他设置配置、以便更好地理解这些问题。
下面的错误因编译后链接器操作失败(0、1或2)而异: