学习的路上,越努力越渺小。
——单片机初学者在学习单片机的路上,我用过KEIL、CodeWarrior、CCS等编译器,但最近因一个小项目,采用的PIC18F25K80芯片,使用MPLAB的PICC18编译器,在烧写代码的时候,突然意识到自己一直在使用.Hex文件,但从未对该文件去研究、理解过,从而有此下文:Hex文件通常由编译器在项目编译链接后生成,用于传输被存储于ROM或者EEPROM 的程序或数据,可在项目工程目录下查到。用记事本或者Notepad++打开hex文件,hex 文件由一行行“:数字”组成,每行以冒号开头,内容全部为16进制数字。
Hex文件每行都是一个十六进制的记录,该记录由5各部分组成:数据长度(1个字节)、数据起始地址(2个字节,高位在前,低位在后)、记录类型(1个字节)、数据(n个字节)、校验码(1个字节)。
打开Hex文件,如下:
:020*********F2
:101800002039002055190008A1270008A327000847
:1018100000000000000000000000000000000000C8
:10C000001A67296887689968A768B20529A401009A
:10C01000204214021440420A0313DA0342140313A9
:08C020000B03420A0327DB03B6
:04000005080018BD1A
:00000001FF
hex字符串是什么
以:101800002039002055190008A1270008A327000847为例:
“0x100x180x000x000x200x030x900x020x550x190x000x080xA10x270x000x080xA3 0x270x000x080x47”
“:”表示记录开始;“回车换行”表示记录结束;
“0x10”表示数据长度是16,即本条记录数据是16个字节;
“0x180x00”表示数据起始地址,即本条记录的数据起始地址为0x1800;
“0x00”表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
“0x00”:数据记录;
“0x01”:标识文件结束;
“0x02”:标识扩展段地址记录;
“0x03”:开始段地址记录;
“0x04”:标识扩展线性地址记录(虚地址);
“0x05”:开始线性地址记录(虚地址);
“0x20--0x08”表示数据;
“0xA3”表示校验码。
校验码的算法:计算校验码前所有字节的累加和(不进位),校验码=0x100-累加和。
由此可知,上面的hex文件主要进行以下操作:标识扩展线性地址、记录数据、开始线性地址记录、结束文件。
因对扩展线性地址的概念不明确,再次延伸:
数据的绝对地址由扩展性地址和偏移地址相加获得。
例如:
:020*********F2
:101800002039002055190008A1270008A327000847数据记录地址:1800
扩展线性地址:0800
数据绝对地址:08001800

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。