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