Intel Hex 文件格式

简介

这种文件格式一般是以hex为后缀名,在嵌入式MCU程序开发中,经常编译链接后生成一个这样文件,然后将这个文件烧写到MCU的ROM中。

所以,这个是开发工程的输出文件类型的一种。

发明这种文件格式的目的就是存储最终的二进制程序和数据,然后使用这种文件来传输程序和数据,然后烧写到ROM里。

所以很多烧写器或调试模拟器都支持IntelHex这种类型的文件进行芯片的程序烧写。

比如,使用IAR EWARM开发工具开发STM32系列Cortex-M4的某款芯片,创建工程,编写代码后,在工程构建成功后,就可以输出一个hex文件。

此hex文件就是最终程序文件,最为软件的可用发布成果物。

Hex文件类型全名:Intel hexadecimal object file format, Intel hex format or Intellec Hex。

实际上是将二进制文件转换成了ASCII码形式的文本文件,我们用文本编辑器打开hex文件,就可以看到里面的内容。

这种文件类型的目的就是为了烧写microcontroller, EPROMs和其他一些可编程逻辑器件。

本来目标文件里面的内容,应该是源代码编译后得到的机器码。

然后将机器码的二进制文件转换为hex文件。

此文件格式,顾名思义,是Intel公司发明的。在1973年,纸片打孔输入时就开始使用。

为了能够加载和运行程序,要通过打孔纸片把数据信息传给ROM的生产环节。

具体来说就是把一个字节的数据的16进制的表示,转换成字符。

比如,一个字节是‘A’,值为0x41,那就用"41"表示这个字节。

这样做的好处,不但接收方能得到正确的数据,发送发使用这种表达方式,用可打印字符来统一表示所有数据,更方便编辑和操作。

举个例子打开一个hex文件看一下:

:020000040800F2

:20000000F0A10520C9AD030849AA03084BAA03084DAA03084FAA030851AA0308000000009F

:20002000000000000000000000000000C598010853AA0308000000006D98010855AA03083A

:200040003DAE030841AE030845AE030849AE03084DAE030851AE030855AE030859AA030884

:2000600059AE03085DAE030861AE030865AE030869AE03086DAE030871AE030875AE030880

:2000800079AE03087DAE030881AE030885AE030889AE03088DAE030891AE030895AE030860

还有一种情况,当传输或存储可烧写的程序文件时,如果单纯使用二进制bin文件,如果文件较大或者地址不连续时就比较麻烦,因为bin文件是纯粹的镜像image文件。这时使用hex文件就能更好的处理这些情况。举个例子,我们主控芯片如果有需要烧写外部另一个MCU固件程序的功能,则主控芯片就要事先存储固件程序的数据,这时如果用bin文件,那就要定义一个很大的数组,而使用hex文件格式,在代码中只要定义一行行的字符串数据,这样更容易管理和操作。

比如对于赛普拉斯的蓝牙芯片,更新驱动程序的话把程序文件放在源文件里的话:

BTCypress_fw_hex.cpp:



/* Cypress Mini Driver */

const char * minidriver = ":02000004000DED\n\

:10020000F8B5664800F0CEF8654C0025E561E5627A\n\

:1002100000F0D2FC01F0A1F810B10120A07001E0C3\n\

:1002200000F038FD00F046FD01F066FF00F0A5FC8F\n\

:100230005B4FA5627F1C07F12F06207840F001007C\n\

:10024000207001F0F6FFE07021780D2801F08001A8\n\

:1002500021702581F1D00A28EFD03A2812D04C28FD\n\

:1002600013D04D2814D04E2815D0CE2816D05E2895\n\

:1002700017D0E52818D0CC2819D018281AD057281C\n\

:100280001ED050E000F0E7FB16E000F0BDFB13E0ED\n\

:1002900000F08EFB10E000F0F5FA0DE000F0AFFA90\n\

......

:10C6D000000000000000000000000000000000005A\n\

:10C6E000000000000000000000000000000000004A\n\

:10C6F000000000000000000000000000000000003A\n\

:10C700000000000000000000000000000000000029\n\

:10C710000000000000000000000000000000000019\n\

:10C7200000000000281F38A138AD823586A04313D1\n\

:10C730005C471E5DAE03283802FF1B666C080A5773\n\

:10C740008E83994EA7F7BF50DDA302290328080561\n\

:10C75000FF26FE2EE709244FB7914061D97A6CE895\n\

:10C76000A203280207FF4BDEC4EDD4753B91EB47D3\n\

:10C770002D2E08767FA40002120012000002150080\n\

:10C780001500018900000000000A040002000002F8\n\

:10C7900015001500018900000000000215001500B9\n\

:10C7A0000182000000000806090B0A092B282D034E\n\

:10C7B0000B2C092B030000802622000806090B0A17\n\

:10C7C0000000000B0000000044000001000000FF1A\n\

:10C7D0000000000100000002000000011100000044\n\

:10C7E0000000000000000000000000FFFFFFFFFF4E\n\

:10C7F000FF0000AA55F00F68E597D2000000000A7C\n\

:10C8000050007CC722000B480C4908B5884202D072\n\

:10C810000B4A05F698FB0A4A00210A4805F697FBE1\n\

:10C82000F4F71BF9094B094A23F00F031360BDE825\n\

:10C830000840F4F7A0B89026220090262200740B3E\n\

:10C840
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值