【问题标题】:How do you understand Hex file ? (Extended Address Record)你如何理解十六进制文件? (扩展地址记录)
【发布时间】:2014-01-15 11:28:30
【问题描述】:

我正在尝试为 PIC18 制作引导加载程序,因此我需要了解如何正确处理 hex 文件。例如,我了解如何处理以下十六进制行。

:040C0000E2EFFFF030

04: 字节数

0C00:十六进制数字地址

00:数据记录

E2EFFFF0:数据序列

30:校验和

所以我会知道如何处理上面的行,但是下面的十六进制行怎么样。

:020000040001F9

02:字节数

0000:地址

04: 扩展线性地址记录

0001:数据

F9:校验和

但是我到底该怎么做呢?我是否将这些数据写入该地址?你能把它翻译成机器语言吗?

顺便说一下,我的应用程序从地址0c00 开始,引导加载程序从地址0020 开始,在它上面是中断向量。谢谢!

更新

如果十六进制文件的第三行如下,地址FFC0会改变吗?

:10FFC000FF00FF00FF00FF00FF00FF000001E9EF5E

我在想既然hex文件的第二行有04(扩展线性地址记录),那么我应该在第三行FFC0的地址上加上0001,所以新的地址应该是这样的.

$0001 + $FFC0将等于1FFC0,所以第3行的下一组数据字节应该写入这个地址1FFC0,这样对吗?

【问题讨论】:

  • 现在,这是某人的妖术。
  • 这只是一个幻想,因为它是 PIC18。结婚后就是支票。
  • 请用我的新假设检查新的更新,谢谢!
  • 是的。那是正确的。并在每个地址前面加上 $0001,直到你看到另一个 04 行来更改它。

标签: c embedded microcontroller pic bootloader


【解决方案1】:

来自维基百科Intel Hex(此类信息的明显来源)

04,扩展线性地址记录,允许完全 32 位 寻址(高达 4GiB)。地址字段为0000,字节数为 02. 两个数据字节(大端顺序的两个十六进制数字对)代表所有后续的 32 位地址的高 16 位 00 类型记录直到下一个 04 类型记录到来。如果没有 04类型记录,高16位默认为0000。获取绝对值 后续 00 类型记录的地址,由 最新的 04 记录的数据字段添加到 00 记录 地址。

所以公式是(linAddr <<16) + addr 或者在你的情况下是 ($0001

而对于02/Extended Segment Address Record的情况,公式改为
(segAddr << 4) + addr

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2021-04-30
    • 2014-03-17
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2018-09-27
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多