工具与软件:
尊敬的支持团队:
我需要编写的一部分代码被认为是关键的、以后无法更改、另一部分可能会正常更改。
为了遵守此要求、我 已经在 FLASH_BANK 中为此关键代码创建了一个特定区域、然后使用链接器计算 CRC:
.section_safety : {sta_tests.obj(.text),
stl_sp.obj(.text),
stl_cpu_reg.obj(.text),
ref_crc.obj(.text) } crc_table(_my_crc_table_for_safety, algorithm=CRC32_PRIME) >FLASHBANK0_SAFETY, ALIGN(8)
不同的.obj 是包含关键代码的相应文件。
计算 CRC 也可以、在启动时进行 CRC 校验(根据链接器保存的值)。
我的问题实际上是、更改非关键部分中的某些代码部分会更改 CRC 的值。
起初、我有一些由关键代码调用的函数、它们位于与非关键代码相同的闪存区域中。 因此、当非关键代码中的代码发生变化时、受链接器影响的地址也发生了变化、这可以解释这个问题(此时我还可以看到 Critical .obj 文件在非关键代码发生变化时发生了变化)。
我的第一项工作就是将由 特定闪存区域中的关键代码调用的所有函数放入特定闪存区域、或将函数调用替换为该函数的代码。 我没有更改内联的函数调用、因为链接器会复制 关键区域中的代码。
现在、所有这项工作都已完成、如果非关键区域发生变化、我仍然有一个不同的 CRC。

我比较关键部分的.obj 文件、以及非关键部分更改前后的.obj 文件、这些 obj 是相同的。 在.lst 文件中、我只能看到日期/时间的差异。
但是我可以看到、在"构建项目"期间、即使对我来说没有明显的原因、也会生成一个关键的 c 文件。
也许仍然有一个函数调用在非关键区域中调用代码、但检查.map 文件中的差异、这似乎并不存在。
在我的理解中有什么问题吗? 如果此器件没有变化、那么关键区域的 CRC 不应更改?
我可以使用什么方法来找到一部分关键代码受非关键代码(如果有)影响的情况?
此致。