学习的道路,越努力越小。
——单片机初学者
在学习单片机的过程中
我用过
KEIL
在、
编码器
在、
CCS
等待编译器,
但是最近为了一个小项目
正在录用
PIC18F25K80
芯片,使用
MPLAB
的
PICC18
编译器在烧代码的过程中,突然注意到了
自己一直在用
. Hex
虽然是文章,但是因为没有对本文进行过研究和理解,所以如下。
Hex
通常,编译器在项目编译链接后生成文件,并保存该文件进行传输
ROM
或者
EEPROM
的程序或数据可以在项目工程目录中找到。 要不要用记事本
Notepad
打开
hex
文件,
hex
文件由以冒号开头的一行“:数字”组成,全部内容
16
进制数。
Hex
文件的每一行都是十六进制记录。
这个记录是
5
各部分的构成:
数据长度
(
1
字节)
在、
数据的起始地址(
2
个字节,高位在前,低位在后),记录类型(
1
个字节)、数据(
n
字
节)、校验码(
1
字节)。
打开
Hex
文件,以下:
:02
0000
04
0800
F2
:10
1800
00
2039002055190008 a 1270008 a 3270008
47
:10
1810
00
00000000000000000000000000000000
C8
.
:10
C000
00
1a 67296887689968 a768 b 20529 a 40100
9A
:10
C010
00
204214021440420 a 0313 da 0342140313
A9
:08
C020
00
0B03420A0327DB03
B6
:04
0000
05
080018BD
1A
:00
0000
01
FF
以心
:101800002039002055190008 a 1270008 a 327000847
示例:
「
0x10
0x18
0x00
0x00
0x20
0x03
0x90
0x02
0x55
0x19
0x00
0x08
0xA1
0x27
0x00
0x08
0xA3
0x27
0x00
0x08
0x47
”
:
表示记录开始;
「
换行
”
表示记录结束;
“0x10”
数据长度为
16
即,正式记录数据为
16
1字节;
“0x18
0x00”
数据开头地址,即本记录的数据的开头地址
0x1800
;
“0x00”
表示数据类型。 数据类型如下:
0x00
在、
0x01
在、
0x02
在、
0x03
在、
0x04
在、
0x05。
“0x00”
数据记录
“0x01”
:表示文件的结束
“0x02”
:标识扩展段地址记录
“0x03”
:开始段地址记录;
“0x04”
:识别扩展线性地址记录(虚拟地址);
“0x05”
:线性地址记录开始(虚拟地址);
“0x20
--
0x08”
表示数据;
“0xA3”
表示校验码。
校验码算法:
计算校验数位前所有字节的累加
(不进位)
,
校验码
=
0x100
_
累加。
由此可见,上面的
hex
文件主要执行以下操作:识别扩展线性地址、记录数据、起始线
性地址记录,文件结束。
由于扩展线性地址的概念不明确,所以再次扩展: