历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2020年08月14日 | HEX文件格式分析 - 适用MPLAB

2020-08-14 来源:eefocus

概要

.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)行是结尾标志行。

推荐阅读

史海拾趣

Chicago Miniature公司的发展小趣事

随着LED技术的兴起,CML敏锐地捕捉到了这一趋势,并成为第一家引进LED灯具的公司。这一决策为公司带来了巨大的发展机遇。CML不断投入研发资源,推出了一系列具有创新性的LED产品,不仅提高了照明效率,还降低了能耗。这使得CML在微型照明领域逐渐取得了领先地位,并赢得了广泛的客户基础。

Apacer公司的发展小趣事

除了产品创新,Apacer宇瞻科技还注重为客户提供量身定制的解决方案。在某次客户系统升级中,宇瞻科技的技术团队发现原有SD卡无法满足大量随机小数据的存取应用,甚至可能缩短SSD使用寿命。于是,宇瞻科技建议客户导入Page Mapping技术,并搭配Smart Read Refresh技术的SD卡,成功解决了客户的存储问题。这一技术突破不仅帮助客户实现了系统升级,也为宇瞻科技赢得了更多的信任和赞誉。

Amphenol RF公司的发展小趣事

1997年,Apacer宇瞻科技在台湾创立,初期专注于DRAM模组的专业供货。公司凭借对半导体垂直整合的完整内存模组技术能力和专业营销业务,迅速在全球市场上打响了Apacer的自有品牌。1999年,宇瞻科技更是跃升为全球第四大内存模组厂商,奠定了其在行业内的领先地位。

Custom Electronics Inc公司的发展小趣事

在电子行业的早期阶段,CEI凭借其卓越的研发团队和创新能力,成功开发出一款具有革命性的新型电容器。这款电容器以其高效能、长寿命和稳定性强的特点,迅速在市场中获得认可。CEI借此机会,进一步扩大了生产规模,提高了产品质量,逐渐确立了其在电子行业中的领先地位。

Datatronic公司的发展小趣事

随着环保意识的提高,Datatronic公司开始探索绿色发展的道路。公司注重节能减排和资源循环利用,通过改进生产工艺和使用环保材料等方式降低对环境的影响。同时,公司还积极推广绿色产品和技术,引导客户树立绿色消费观念。这些努力使得Datatronic公司在环保方面取得了显著成效,赢得了社会的广泛赞誉。

ADMOS公司的发展小趣事

面对不断变化的市场需求和技术趋势,ADMOS公司始终保持着对创新的热情和追求。公司投入大量资源用于研发新的技术和产品,不断推出具有创新性和竞争力的产品。这些创新成果不仅提升了ADMOS在市场上的竞争力,也为公司的未来发展指明了方向。

问答坊 | AI 解惑

A System Evaluation of CAN Transceivers

A System Evaluation of CAN Transceivers…

查看全部问答>

PCB设计中经典技巧总结(二)

1.Protel VS PowerPCB    曾和PADS的工程师一块工作过半个月,当时我做Protel的技术支持,我们两家下一步可能都要做Veribest的代理,所以遇到一起了。听说PADS有不少很顺手的功能,用惯了上瘾,问那个哥儿们是不是这样,人家很谦虚,说 ...…

查看全部问答>

关于在Marvell PXA310上USB HOST PORT3 的问题

我在 310 上可以正常使用 USB HOST PORT 2 (OTG) ,但是使用 USB HOST PORT 3 时,终端输出如下信息 usb 1-3: new full speed USB device using pxa27x-ohci and address 84   usb 1-3: device descriptor read/64, error -62   ...…

查看全部问答>

大家申请的TI48元的LM3S8962的的板子是发的什么快递啊?

 大家申请的TI48元的LM3S8962的的板子是发的什么快递啊?…

查看全部问答>

CCSv4的TI的培训视频链接

现在很多芯片只能在CCSv4上支持,但是CCSv4已经和CCSv3.3是完全不同的架构,是基于eclipse架构的。所以调试界面与CCSv3.3是完全不同的。 TI有CCSv4的培训视频链接http://e2e.ti.com/cn/media/p/2090.aspx。 主要还是需要亲自调试,多使用。个人觉 ...…

查看全部问答>

做个ARM系统,片内有64KRAM,还需要再外接一个RAM吗?

用STM32F103zet6做个zigbee手抄器板子,cpu内部有64k的ram,还需要再外接一个ram吗?…

查看全部问答>

和ZigBee无线自组网相比WiMi-net无线自组网的优势

关于ZigBee技术,我们都知道ZigBee是一种技术规范,是一类产品的统称。由于ZigBee本身是一个非常庞大的体系,  不同实现厂家由于编码水平不同,对于ZigBee规范理解的不同,异常处理机制健壮程度不同,在特定的情况下其链路的智能程度也 ...…

查看全部问答>

ZigBee协调器网络的建立

ZigBee协调器网络的建立 一、协调器网络的建立      1、 网络的格式化           A:初始化的能量阀值为16。通过设置ZDApp_event_loop任务中的事件ID为ZDO_NETWORK_INIT以便执行B。   ...…

查看全部问答>

求助:一个关于PIC16F74的问题

小弟初学单片机,菜鸟一枚,最近写了一个无线通信的程序,用的是PIC16F74,RA3作为无线信号接收脚,平时电平为2.5V左右,程序是这样的:先检测2ms的低电平,再检测高电平,然后开始解码。可是我上电以后什么信号都没发就老是直接开始解码了,测RA3 ...…

查看全部问答>

1302的备用电源的问题

请问使用DS1302时钟芯片的备用电源给芯片供电,需要补需要软件上进行什么设置? …

查看全部问答>