PIC HEX文件格式分析

PIC HEX文件格式分析 (2012-07-30 18:48:46)
标签:

杂谈

分类: 单片机知识

PIC HEX文件格式分析
概要
.HEX文件是MPLAB生成的一种可执行文件的格式,它本身是由ASCII字符
组成的,但其包含16进制的可执行代码的信息,也就是说,这类文件描述
在程序存储器的哪个单元放入什么指令。


.HEX文件的种类
MPLAB可以生成3种不同格式的可执行文件。其中两种是.HEX文件,它们分别
称为INHX8M格式(Intel Hex Format)和INHX32格式(Intel Hex 32 Format);
另外一种称为INHX8S格式(Intel Split Hex Format),这种格式会同时
生成.HXL和.HXH文件,两个文件分别存放指令数据的低字节和高字节。

这里只讨论两种.HEX文件。MPLAB内嵌的连接器MPLINK在默认情况下生成INHX32
格式的.HEX文件,也可以使用/aINHX8M选项指定生成INHX8M格式的.HEX文件。

我们的烧写器应该能支持这两种格式的.HEX文件。


INHX32格式的.HEX文件
一个INHX32格式的.HEX文件是由若干个形式相同的行构成的。


行的种类
对于最多只有8K字程序空间的PIC16F87X单片机而言,相应的.HEX文件只有3种
不同的行:线性地址定位行,代码数据行,结尾标志行。一个.HEX文件的第1行
是一个线性地址定位行,后面接着是若干个代码数据行,最后一行是结尾标志
行。
线性地址定位行仅仅对超过32K字代码的程序有用。实际上,INHX32格式与
INHX8M格式的不同之处就在于它能表示超过32K字代码的程序。线性地址
定位行中指定指令存放地址的高16位,而低16位由代码数据行中的“AAAA”部分
指定。“AAAA”表示指令存放地址的2倍,所以最多能表示32K字的指令,而
PIC16F87X单片机最多只有8K字程序空间,故不需要用到指令地址的高16位,
因此.HEX文件的线性地址定位行指定的指令地址的
高16位总为“0000”。

代码数据行指定一段连续存放的代码的起始存放地址和代码值。通常一行中
最多有16条语句的代码。

结尾标志行标志整个文件的结束。

 

行的格式
一个INHX32格式的.HEX文件的每一行都是下面这种格式:
:BBAAAATTHHHH....HHHHCC
即开始是9个字符组成的前缀“:BBAAAATT”,加上若干个4字符的“HHHH”
数据,结尾是2个字符的校验字“CC”。这里所说的“字符”是指组成文件
的ASCII字符,而一个16进制“字节”必须用两个“字符”表示。
各个部分的意义是:
: 一行的开始符。
BB 数据部分的字节数,即“HHHH”部分的字节数。
AAAA 代码开始存放的地址的2倍。仅在代码数据行中有意义,在其余两种类型的
行中这一部分为“0000”。
TT 行的类型。
          00    代码数据行
          01    结尾标志行
          02    段地址定位行(PIC16F87X单片机的.HEX文件中没有用到)   
          04    线性地址定位行
HHHH 在代码数据行中,表示一条14-bit的指令代码,其中低字节在前,高字节
在后,比如“movlw 0xaa”这条指令对应的代码是30AA,相应的HHHH表示为AA30;
在结尾标志行中,没有这一部分;在线性地址定位行中,这一部分为指令存放地
址的高16位。
CC 校验字。校验规则是,本行中前面所有的字节(两个字符)表示的16进制数
相加,再加上CC表示的16进制数,所得的和必须是256的整数倍,即用16进制表示
时末尾两位都为0。


示例
下面是一个简单的程序的汇编语句及对应的可执行代码。
地址     代码   汇编解析        源程序
-------  -----  -----------     ---------------------
                                org   0x0000
000000   2810   GOTO  0x10      goto  main
                                org   0x0004
000004   2818   GOTO  0x18      goto  int_serv

                                org   0x0010
                                main
000010   1683   BSF   0x3,0x5   bsf   STATUS, RP0
000011   1303   BCF   0x3,0x6   bcf   STATUS, RP1
000012   0188   CLRF  0x8       clrf  TRISD
000013   1283   BCF   0x3,0x5   bcf   STATUS, RP0
000014   0188   CLRF  0x8       clrf  PORTD
000015   160b   BSF   0xb,0x4   bsf   INTCON, INTE
000016   178b   BSF   0xb,0x7   bsf   INTCON, GIE
                                stop
000017   2817   GOTO  0x17      goto  stop

                                int_serv
000018   30ff   MOVLW 0xff      movlw 0xff
000019   0088   MOVWF 0x8       movwf PORTD
00001a   0009   RETFIE          retfie
                                END
它对应的INHX32格式的.HEX文件如下:
:020000040000FA                                         (1)
:020000001028C6                                         (2)
:020008001828B6                                         (3)
:04000A00003400348A                                     (4)
:10002000831603138801831288010B168B17172878             (5)
:06003000FF30880009000A                                 (6)
:00000001FF                                             (7)
第(1)行是线性地址定位行。第(2)行至第(6)行是代码数据行。
第(7)行是结尾标志行。


INHX8M格式的.HEX文件
对PIC16F87X单片机而言,INHX8M格式的.HEX文件与INHX32格式的.HEX文件
只有一点不同,就是INHX8M格式的.HEX文件没有线性地址定位行。以下是
上一节所示的源程序对应的INHX8M格式的.HEX文件。
:020000001028C6                                         (1)
:020008001828B6                                         (2)
:04000A00003400348A                                     (3)
:10002000831603138801831288010B168B17172878             (4)
:06003000FF30880009000A                                 (5)
:00000001FF                                             (6)
可见这个文件就是前面INHX32格式的.HEX文件的(2)至(7)行。本文件中的
(1)至(5)行是代码数据行,第(6)行是结尾标志行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VC Hex文件格式解析是指对VC(Version Control)系统中的Hex文件进行解析分析的过程。 首先,VC是一种用于版本控制和代码管理的工具,它采用二进制格式的Hex文件来存储源码、修改记录和版本信息等。Hex文件是一种十六进制形式的文本文件,可以通过特定的解析算法将其转换为可读的源代码或其他文件。 在解析VC Hex文件时,我们需要了解其基本结构和格式。Hex文件通常由多个记录(Record)组成,每个记录包含了不同的类型和数据内容。常见的记录类型包括:数据记录、扩展段地址记录、起始段地址记录和结束记录等。 数据记录包含了实际的源代码或其他数据信息,其格式包括起始地址、数据长度、数据内容和校验和等。扩展段地址记录用于扩展程序的地址空间,起始段地址记录指定程序的入口地址,结束记录表示文件结束。 在解析过程中,我们需要按照记录的格式和顺序读取Hex文件,并根据记录类型对数据进行处理。例如,对于数据记录,我们可以根据起始地址和数据长度将数据写入相应的内存空间或文件中。 解析VC Hex文件的目的是为了能够获取其中的源代码、版本信息或其他相关数据,以便进行版本对比、回滚或其他操作。通过解析Hex文件,我们可以还原出之前的代码状态或版本,并根据需要进行相应的操作。 总而言之,VC Hex文件格式解析是一项对VC系统中的Hex文件进行结构分析和数据提取的过程,通过解析该文件,我们可以获取其中的源代码和版本信息,并进行相应的版本管理和控制。 ### 回答2: VC Hex文件格式是一种常见的存储二进制数据的文件格式。它通常被用于将机器语言代码、固件、软件等以十六进制的形式存储在计算机中。 VC Hex文件格式解析的过程主要包括以下几个方面: 1. 文件结构:VC Hex文件由多行文本组成,每行包含一条记录。每条记录通常由一个冒号开始,后面跟着一系列十六进制数值,用于表示数据。记录的具体格式按照规定的标准进行编码。 2. 记录类型:VC Hex文件的记录有多种类型,包括数据记录、扩展段地址记录、起始段地址记录、起始线性地址记录等。根据记录类型的不同,记录中的数据和含义也会有所差异。 3. 数据内容:VC Hex文件中的数据记录包含机器语言指令、数据、校验和等。数据记录的具体内容由记录类型和记录长度决定,它们被以十六进制的形式表示。 4. 校验和:每条记录都包含一个校验和字段,用于验证记录的完整性和准确性。校验和一般为记录中所有数据的和的补码。 解析VC Hex文件时,可以通过逐行读取文件内容,并根据每行的格式和记录类型,提取出需要的数据和信息。根据记录类型的不同,可以按照规定的格式解析出相应的数据,如地址、校验和等。对于数据记录,可以将每个记录中的数据转换为二进制形式,并根据需要进行后续处理或使用。 总之,解析VC Hex文件格式需要了解文件结构、记录类型、数据内容和校验和等方面的知识。通过逐行解析文件内容,可以获得其中存储的数据和相关信息,进而进行后续处理和使用。 ### 回答3: VC Hex文件格式是一种用来描述微控制器程序存储的十六进制文件格式。它将程序的机器码以十六进制形式进行编码,并且以特定的格式进行排列和存储。 在VC Hex文件中,每一行都包含了一定数量的数据。这些数据通常表示机器指令、数据或其他相关信息。每一行的开头通常包含了该行的地址信息,用于标记数据所在的内存地址。而紧接着的数据则是该地址处的值。 VC Hex文件的地址通常是以16位或32位的形式表示的,这取决于所使用的微控制器架构。地址信息的具体格式也可能会有所不同,但通常都会包含一个地址字节数和一个地址校验和。 除了地址和数据之外,VC Hex文件还可能包含一些其他的特定指令,例如起始地址指令和结束地址指令。这些指令用于标记程序执行的起始地址和结束地址,以便于加载和执行程序。 解析一个VC Hex文件的过程通常涉及以下几个步骤: 1. 读取文件并逐行解析每个数据记录。 2. 提取地址信息和数据值,并进行必要的校验。 3. 根据地址信息将数据值存储到对应的内存地址中。 4. 根据特定指令解析起始地址和结束地址,以确定程序的入口点和结束点。 总的来说,VC Hex文件格式解析是将这些十六进制数据按照特定规则进行解析和存储的过程,以便于加载和执行微控制器的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值