修复英特尔 HEX 文件的校验和问题

Fixing checksum issues on intel HEX files

我制作了以下英特尔 hex 文件片段以使用几个 8051 处理器模拟器进行测试:

:1000F5007002501F500CED2562FDEE3561FEEF35A7
:1001050060FFE56233F562E56133F561E56033F57E

我使用的一个位于此处:http://www.jroweb.de/8051/

根据我的研究,据我了解,intel hex 文件的校验和是通过对所有十六进制数字对(最后一个除外)求和,然后将结果与 255 进行与运算以获得 8 位值,将值取反,加 1,然后做 mod 256.

我基本上遵循了来自这些论坛的受访者的数学:

https://social.msdn.microsoft.com/Forums/en-US/a1736ae8-2db6-4657-a98c-e3e447ebfda3/calculate-intel-hex-file-format-checksum

当我执行计算时,上面代码段中每一行的校验和值都是正确的,但是在我上面提到的 8051 处理器模拟器程序中,它在最后一行显示校验和错误。它认为该值应该是 7F 而不是 7E。

是否有可能在十六进制文件的最后一行中存在误报(这让某些软件认为 7F 是正确的值)?如果是这样,我应该如何安排我的 hex 文件中的最后一行来修复它?

据我所知,您的校验和是正确的。基于这个和我提供给它的其他一些记录,模拟器似乎在某些输入上有一个错误。

您有多种选择,包括:

  • 编辑模拟器的t8051m.ini文件并将IgnoreChecksum设置为1

  • 通过编辑您的十六进制记录来携带校验和来调侃模拟器 期望而不是正确的校验和

  • 反汇编模拟器的.exe文件,找到bug,修复。 (在你之前 竭尽全力,您可以尝试将问题报告给作者。它 可能是一个已知的问题,作者从来没有抽出时间去解决 在他的网站上发布。)

  • 使用其他模拟器