简介
这种文件格式一般是以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

最低0.47元/天 解锁文章
1742

被折叠的 条评论
为什么被折叠?



