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.

[参考译文] TMS570LS3137:CRC64实现与使用特定数据时 CRC 生成的链接器不匹配

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1175511/tms570ls3137-crc64-implementation-does-not-match-the-linker-generated-when-crc-when-certain-data-are-used

器件型号:TMS570LS3137

您好!

我知道 CRC 执行过程中有类似的线程、这些线程有助于我了解如何执行 CRC 执行。

用例

因此、从技术角度而言、我要尝试对可执行文件的校准区域中的某些校准值进行一些更改、 然后重新计算完整校准区域的 CRC 并将原始 CRC 替换为新的 CRC、以便映像仍然有效、就像由链接器自身生成一样。 我在 MATLAB 中执行了一个脚本、该脚本提取十六进制的校准区域、然后生成一个 CRC64。

验证

为了首先验证我的实施是否正常、我使用了具有相同算法的在线站点、并使用了在类似线程中提出的 pycrc 工具、我针对不同输入获得完全相同的结果。

问题

我 已经在 原始十六进制文件上运行此脚本、以便能够将映射文件中生成的原始 CRC 与我的实现方式进行比较、但这不会提供如下所示的相同结果。

现在令人困惑的是、当我将 CAL 区域中的所有参数值设置为零时、链接器仍会生成 CRC、默认情况下、CAL 区域包含一些值、如下所示:

此时、使用我的脚本提取默认值并运行算法的实现、我将获得与链接器在映射文件中生成的 CRC 值完全相同的 CRC 值。

我已经尝试更改  区域内的1或2个值、其他所有值都设置为0、我仍然可以匹配生成的 CRC、但我无法判断它在哪里/为什么随校准值的完整数据集而变化。

我的假设是链接器将获取该区域内的所有参数、从0x2c0000一直到0x2c8f00、每次8字节、交换端字节序32位。

_CAL_CRC_TABLE @ 002fffe0记录:1、大小/记录:24、表大小:32
.CALMEMORY:ALCOALM=TMS570_CRC64_ISO (ID=10)、LOAD ADDR=002c0000、SIZE=00008f00、CRC=e94b9294676180be

有人知道我是否需要了解某些对齐要求或填充要求?  

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

    尊敬的 Datonye:

    我们已开始处理您的问题、我们将很快向您提供更新。

    --
    谢谢、
    Jagadish。

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

    尊敬的 Datonye:

    我讨论了您的问题、需要与专家进行讨论。

    --
    谢谢、
    Jagadish。

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

    您好 Jagadish、

    感谢您的观看。

    我 发现问题是什么:

    在 MATLAB 中、当我提取表示浮点值的十六进制字符串的数字值时、 函数'HEX2DEC ('hexstring')'的使用导致值以双精度值的形式返回、并且这是四舍五入的-这意味着十六进制值0x412000003f733333将四舍五入为 0x412000003f733400。

    因此、使用 str2num 解决了我的问题。

    此致、

    数据