历史上的今天
返回首页

历史上的今天

今天是:2024年09月07日(星期六)

2020年09月07日 | PIC HEX文件格式分析

2020-09-07 来源: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  


推荐阅读

史海拾趣

Heimann Optoelectronics Gmbh公司的发展小趣事

为了进一步扩大市场份额,Hei Inc Optoelectronic Division积极实施国际化战略。公司首先在欧洲和北美市场设立了分支机构,并建立了完善的销售和服务网络。通过参加国际展会、与当地企业建立合作关系等方式,公司成功地将产品推向了国际市场。同时,公司还加大了对海外研发中心的投入,吸引了众多国际顶尖的光电子专家加盟。这些举措不仅提升了公司的国际竞争力,还为公司带来了更多的国际订单和合作伙伴。

Carlisle Interconnect Components公司的发展小趣事

Carlisle Interconnect Components公司深知品质是赢得市场的关键。因此,公司建立了严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都严格把控。这种对品质的执着追求,使得公司的产品在国际市场上获得了良好的口碑。同时,公司还积极拓展海外市场,与多家国际知名企业建立了稳定的合作关系,进一步提升了公司在全球电子连接器市场的影响力。

HBH-Microwave公司的发展小趣事

为了加速全球化进程,HBH-Microwave积极寻求与国际知名企业的合作。通过技术交流和联合研发,HBH与多家跨国公司建立了长期稳定的合作关系。这些合作不仅为公司带来了先进的技术和管理经验,也帮助HBH的产品成功打入国际市场,实现了销售额的快速增长。同时,HBH还通过参加国际展会和研讨会,不断提升品牌知名度和行业影响力。

對餘科技(DIOFIT)公司的发展小趣事

DIOFIT公司自创立之初,便面临着激烈的市场竞争和技术挑战。创始人团队凭借对电子技术的深入理解和热情,决心打造一家专注于高端电子产品研发和生产的企业。在资金紧张、人才匮乏的情况下,他们坚持自主研发,不断优化产品设计,最终成功推出了一款具有创新性的智能家居控制系统,赢得了市场的认可,为公司的发展奠定了坚实的基础。

Ambersil公司的发展小趣事

在国内市场取得一定成绩后,Ambersil公司开始将目光投向国际市场。公司积极参加国际电子展会,与国际同行进行交流合作,不断推广自己的产品和技术。同时,公司还设立了海外分支机构,拓展海外市场。这些举措使得Ambersil公司的品牌在国际上逐渐树立起来,公司的销售额也实现了快速增长。

Abracon公司的发展小趣事

随着电子行业的竞争日益激烈,Ambersil公司意识到,要想在市场中立足,必须注重产品质量。公司加大了对生产线的投入,引进了先进的生产设备和技术,严格把控产品质量。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。这些举措使得Ambersil公司的产品在市场上赢得了良好的口碑。

问答坊 | AI 解惑

tornado2.2下可不可以进行操作符重载?

对一些简单的操作符进行重载,编译没有问题,下载时却提示错误。 有没有人遇到过这种情况??…

查看全部问答>

神啊,救救我吧!关于wince下gethostbyname的使用

当wince连接着USB,USB所连接的电脑可以上网时,gethostbyname可以解析到域名,但是此时把PC端的网络断开,发现还是可以解析到域名,请问哪位大哥有做过此方面的研究啊!!!郁闷,郁闷!!!…

查看全部问答>

wince5.0支持透明显示png图片?动画显示gif图片吗?

wince5.0支持透明显示png图片?动画显示gif图片吗? 1,系统支持吗? 2,有人写过这样的扩展代码吗? …

查看全部问答>

IT跨国公司招聘高级市场经理(嵌入式软件开发市场)

1、对日高级市场经理要求 工作描述:负责面向日本市场进行嵌入式方向的市场营销工作 学    历:本科及以上 工作背景:3年以上嵌入式相关企业工作经验,2年以上市场营销经验 工作地点:日本(经常出差) 薪    资:按照日 ...…

查看全部问答>

请给我点建议,我的项目该如何计划

接到一个项目,主要功能是用串口接传感器,收发数据,进行数据管理这样一个软件。要求在PC和wince设备上运行。我没有做过CE的项目,不知道是应该做一个程序在2个环境都能正常运行好呢,还是分别各做一个。用VC还是C#好。请路过的朋友给点建议好吗, ...…

查看全部问答>

咨询:一个变频调速的小问题。

很简单,我一个1500转的电机,但是想跑30多转,觉得不合适,觉得会对电机不好,但是找不到理由,没想到,本来想说扭矩小,可是好像转速慢,扭矩大啊。 在此请教高人解答了,不胜感激!!!…

查看全部问答>

我似乎很迷茫啊 软件 ?硬件 ? 如何选择?

我很喜欢搞软件 又对硬件很痴迷 现在才刚起步 不知道自己到底往哪个方向发展  从小就喜欢做东西 现在对软件开发又爱不释手 最重要是 现在软件硬件都不是很好  也不晓得自己更偏向于哪个方面! 迷茫啊 ~~~各位给点建议,好不好?~~~ …

查看全部问答>

有需要GE NOVA硅压阻压力充油芯体、压力传感器芯片产品选型与技术参数资料的与我联系

GE NOVA压力充油芯体和压力传感器芯体,有需要技术资料、选型资料和价格表的可与我联系。 QQ:24390 69120…

查看全部问答>

每天一点私房菜--vim命令

vim 编辑器的使用                                                  ...…

查看全部问答>