BIN、HEX、AXF和ELF的区别
几种常见格式的区别; 一、bin文件 Bin文件是最纯粹的二进制机器代码, 或者说是”顺序格式”。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从地址0x00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。 二、hex文件 Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。 就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示。 HEX文件由记录(RECORD)组成。在HEX文件里面,每一行代表一个记录。每条记录都由一个冒号“:”打头,其格式如下: 文件格式: :BBAAAATTHHHH…HHHHCC 含义分别如下: BB:字节个数; AAAA:数据记录的开始地址,高位在前,低位在后; TT: Type ; Type: 00数据记录,用来记录数据;01记录结束,放在文件末尾,用来标识文件结束;02用来标识扩展段地址的记录;04扩展地址记录(表示32位地址的前缀); HHHH:一个字(Word)的数据记录,高字节在前,低字节在后; TT之后共有 BB/2 个字的数据 。 CC: 占据一个Byte的CheckSum; 举例: 每行中的数据并不是一定有的,第二个字节数据长度为0,那么这行就没有数据。 由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear Address Record。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。例如: :020000040004F6 :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE5805F20B9F0FF1FE518F09FE51D :00000001FF 第一行,是Extended Linear Address Record,里面的数据,也就是基地址是0x0004; 第二行是Data Record,里面的地址值是0x0000。那么数据18F09FE518F09FE518F09FE518F09FE5要写入FLASH中的地址为 (0x0004 « 16) | 0x0000,也就是写入FLASH的0x40000这个地址。 同样,第三行的数据的写入地址为0x40010。当一个HEX文件的数据超过64k的时候,文件中就会出现多个Extended Linear Address Record。 校验值:每一行的最后一个值为此行数据的校验和。例如: :1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0; :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D; 校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。即各字节二进制算术和,不计超过256的溢出值,然后用0x100减去这个算数累加和,得出得值就是此行得校验和。 如手头的STM32 HEX 第一行 020000040800F2; End of File Record 行是每一个HEX文件的最后一行。例如: ...