冰冻三尺非一日之寒,滴水穿石非一日之功

文章目录

  • 引言
  • 文件分类
  • 1、bin文件
  • 2、hex文件
  • 3、axf文件
  • 4、elf文件
  • 总结


引言

bin、hex、elf、axf作为嵌入式开发中比较常见的文件格式,一直在使用,从未深入理解过相关区别和联系。借本篇章做个简短总结,描述相关差异。如有错漏之处,敬请指正。

文件分类

1、bin文件

bin文件是单纯的数据文件,直接存储于flash当中。由于不包含地址信息,使用下载器时往往需要设置起始地址。也正是由于其不包含其他信息,故编译生成的文件中,bin文件所占内存最小。其查看方式也需要特定的二进制查看器。如图所示,使用J-flash打开一个二进制文件。

bin保存文件的exe hadoop bin file文件_数据

2、hex文件

本文所述hex文件为Intel Hex,是由Intel Hex,本质是ASCII文本行组成,由换行符或回车符或两者分隔。文件以行为单位记录数据,每行都由任意数量的十六进制数组成。它们按以下格式排列

:

A

B

C

D

E

1Byte

2Byte

1Byte

N Byte

1 Byte

: 数据开头,固定格式
A:本行数据的长度
B:数据起始地址
C:数据类型
D:数据字节(其长度大小与A相同)
E:校验和(0x100 - 累加和)

关于C数据类型的详解

00

Value

01

数据记录

02

文件结束记录

03

扩展段地址记录

04

扩展段地址记录

05

扩展线性地址记录

06

开始线性地址记录

如下是截取的部分hex文件

:020000040800F2
:200000006837002069010008750700086D07000871070008F9010008D11000080000000044
:20002000000000000000000000000000F90B000861020008000000007F010008350D000877
......
:00000001FF

代入分析 :020000040800F2

02:数据长度两个字节
0000:起始地址为0x0000
04:数据类型,扩展地址为0x0800 指示以下每行的高位地址为0x0800
0800:数据
F2:校验和 (0x100-0x0E (2+4+8) )
该行指示 以0X0800作为段扩展地址高位,以下每行高位地址为0X0800
则第二行的记录的起始地址为0X08000000
第三行的记录地址为0X08000020

3、axf文件

axf文件如何打开 axf文件是基于ARM编译器产生的包含调试信息的编译文件。使用MDK开发环境时,进入调试模式下,需要依赖于axf文件。MDK5在调试下,会通过J-LINK将axf文件下载如单片机中,用于设备调试。
axf文件的调试信息作用:

可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。
还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。
对变量进行跟踪(利用Watch & Call Stack Window)。

4、elf文件

elf文件(elf文件详解)是LInux系统下产生的包含调试信息的文件,使用Readif指令可以获取、查看elf文件内容。相较于其他三种文件,elf文件包含的信息更多,也更复杂。

总结

受限于个人技术水平,相关分类可能介绍的不是很清楚。文中也贴有大佬们所写分析文章链接,感兴趣的同学可点击跳转深入理解一下。