目录
概述
1 hex文件和bin文件
1.1 认识.hex文件
1.1.1 hex文件内容
1.1.2 hex文件格式介绍
1.1.3 认识几个数据类型
1.2 .bin文件
2 Keil 开发工具生成.hex和.bin
2.1 生成.hex文件
2.2 生成.bin文件
概述
本位主要介绍.hex文件和.bin文件的相关内容,重点介绍了hex文件的格式,其非常有利于学习如何解析.hex文件,还介绍使用keil编译生成hex和bin文件的方法。
1 hex文件和bin文件
使用Keil V5.38编译项目时,其仅仅生成.hex文件,但是在实际项目开发过程中,有时需要生成.bin文件。在MCU中,实际运行的代码也是.bin文件。那么hex文件与.bin文件有啥区别呢?
1.1 认识.hex文件
1.1.1 hex文件内容
打开一个.hex文件,查看其文件内容,笔者使用notepad++打开.hex文件,打开文件后,其内容如下:
文件起始部分内容
文件结束部分内容
1.1.2 hex文件格式介绍
笔者以如下语句介绍.hex文件内容的格式特点
数据格式
该数据对应的字节数据为:
10 00F0 00 87030008870300088703000887030008 B8
字节位置 | 内容 | 描述 |
---|---|---|
Byte0 | 10 | 数据长度 |
Byte1~Byte2 | 00F0 | 该行数据的偏移地址 |
Byte3 | 00 | 数据类型 |
Byte4~Byte n | 87 ... 08 | 数据内容 |
Byte n+1 | B8 | 和校验位 ( Byte0 + Byte1 + .. + Byte n) |
上表中byte3表示数据类型,hex文件中数据类型有如下6种:
数据值 | 描述 |
---|---|
00 | Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录 |
01 | End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾 |
02 | Extended Segment Address Record: 用来标识扩展段地址的记录 |
03 | Start Segment Address Record:开始段地址记录 |
04 | Extended Linear Address Record: 用来标识扩展线性地址的记录 |
05 | Start Linear Address Record:开始线性地址记录 |
1.1.3 认识几个数据类型
1) 扩展线性地址
02 0000 04 0800 F2
根据数据格式分析:
数据长度: 02
数据类型: 04
数据内容: 0800
校验位: F2
字节含义 | 内容 | 描述 |
---|---|---|
数据长度 | 02 | 数据为2个字节 |
数据类型 | 04 | 扩展段地址 |
数据内容 | 0800 | 扩展地址位 address = 0x0800<<16 |
校验位 | F2 | Val = ~(0x02 + 0x04 + 0x08 + 0x00) + 0x01 |
2)开始线性地址
04 0000 05 08000299 54
根据数据格式分析:
数据长度:04
数据类型: 05
数据内容: 08000299
校验位: 54
字节含义 | 内容 | 描述 |
---|---|---|
数据长度 | 04 | 数据为4个字节 |
数据类型 | 05 | 开始线性地址记录 |
数据内容 | 08000299 | 扩展开始线性地址 address = 0x08000299 |
校验位 | 54 | Val = ~(0x04 + 0x05 + 0x08 + 0x00 + 0x02 + 0x99) + 0x01 |
3) HEX文件的结尾
00 0000 01 54
根据数据格式分析:
数据长度:00
数据类型: 01
校验位: FF
字节含义 | 内容 | 描述 |
---|---|---|
数据长度 | 00 | 数据为0个字节 |
数据类型 | 01 | 标识HEX文件的结尾 |
校验位 | FF | Val = ~(0x00+ 0x00 + 0x00 + 0x01) + 0x01 |
1.2 .bin文件
.bin文件就是简单的二进制文件,没有格式,不含任何地址信息。所以,在使用编程器烧写.bin文件时,必须指定烧写地址,而烧写.hex文件时,则不需要这么做。
2 Keil 开发工具生成.hex和.bin
Keil开发工具编译代码时,可生成.hex文件和.bin文件可供用户选择
2.1 生成.hex文件
打开project配置面板,勾选Create HEX File,Kei会编译出.hex文件
编译项目后,其所在的文件路径,可点击如下图标查看
2.2 生成.bin文件
在user 面板配置如下代码:
fromelf --bin --output=$L@L.bin !L
编译项目后,其所在的文件路径,可点击如下图标查看