我正在尝试为PIC18制作一个引导程序,所以我需要了解如何正确处理hex文件。例如,我理解如何处理以下十六行。
:040C0000E2EFFFF030
04
:字节数
0C00
:十六进制数字的地址
00
:数据记录
E2EFFFF0
:数据序列
30
:校验码
所以我知道如何处理上面这行,但是下面的十六行怎么样。
:020000040001F9
02
:字节数
0000
:地址
04
:扩展线性地址记录
0001
:数据
F9
:校验码
但究竟我该怎么做呢?我是否将这些数据写入该地址?你能把它翻译成机器语言吗?
顺便说一句,我的应用程序从地址0c00
开始,bootloader从地址0020
开始,在它上面,是中断向量。谢谢!
更新
如果hex文件的第三行如下,地址FFC0
会改变吗?
:10FFC000FF00FF00FF00FF00FF00FF000001E9EF5E
我在想,因为hex文件的第二行有04
(扩展线性地址记录),那么我应该将0001
添加到第三行FFC0
的地址,所以新地址就是这样。
$0001 + $FFC0
将等于1FFC0
,因此第3行的下一组数据字节应写入此地址1FFC0
,这是正确的吗?
答案 0 :(得分:4)
来自维基百科Intel Hex(此类信息的明显来源)
04,扩展线性地址记录,允许完全32位 寻址(高达4GiB)。地址字段为0000,字节数为 02.两个数据字节(大端顺序的两个十六进制数字对)代表所有后续的32位地址的高16位 00类型记录,直到下一个04类型记录到来。如果没有 04类型记录,高16位默认为0000.得到绝对值 后续00类型记录的地址,由...指定的地址 最近04记录的数据字段被添加到00记录中 地址。
因此公式为(linAddr <<16) + addr
或在您的情况下($ 0001&lt;&lt; 16)+ $ FFC0
对于02 /扩展段地址记录的情况,公式更改为
(segAddr << 4) + addr