1、bin 

Bin 文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。

2.hex

Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。 就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示。

HEX文件由记录(RECORD)组成。在HEX文件里面,每一行代表一个记录。每条记录都由一个冒号“:”打头,其格式如下:

:BBAAAATTHHHH...HHHHCC

BB:字节个数。

AAAA:数据记录的开始地址,高位在前,低位在后。

TT: Type

00数据记录,用来记录数据。

01记录结束,放在文件末尾,用来标识文件结束。

02用来标识扩展段地址的记录

04扩展地址记录(表示32位地址的前缀)

HHHH:一个字(Word)的数据记录,高字节在前,低字节在后。TT之后共有 BB/2 个字的数据 。

CC: 占据一个Byte的CheckSum

举例分析:

:020000040000FA

:10000400FF00A0E314209FE5001092E5011092E5A3

:00000001FF

分析如下:

第1条记录长度为0x02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为FA。从这个记录的长度和数据,我们可以计算出基地址为0X0000。后面的数据记录都以此地址为基地址。

第2条记录长度为0x10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。数据为FF00A0E314209FE5001092E5011092E5,共16个字节,记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004. 其实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5。

第3条记录的长度为00,LOAD OFFSET为0000,TYPE= 01,校验和为FF。类型为01,说明这个是一个END OF FILE RECORD,标识文件的结尾。HEX结束符一般以:00000001FF结尾。

简单总结一下这2种文件格式的区别:

1、HEX文件包含地址信息而BIN文件只包含数据本身,烧写或下载HEX文件时,一般不需要用户指定地址,因为HEX文件内部已经包含了地址信息。烧写BIN文件时则需要用户指定烧录的地址信息。

2、HEX文件是用ASCII码来表示二进制的数值。例如8-BIT的二进制数值0x4E,用ASCII来表示就需要分别表示字符‘4’和字符‘E’,每个字符均需要一个字节,因此HEX文件至少需要2倍BIN文件的空间。

3.elf

ELF(Executableand linking format)文件是x86 Linux系统下的一种常用目标文件(objectfile)格式,有三种主要类型:

(1)适于连接的可重定位文件(relocatablefile),可与其它目标文件一起创建可执行文件和共享目标文件。

(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载到内存执行。

(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。

小结:可由elf文件转化为hex和bin两种文件,hex也可以直接转换为bin文件,但是bin要转化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。

4.axf

Axf文件由ARM编译器产生,除了包含bin的内容之外,还附加其他调试信息,这些调试信息加在可执行的二进制数据之前。调试时这些调试信息不会下载到RAM中,真正下载到RAM中的信息仅仅是可执行代码。因此,如果ram的大小小于axf文件的大小,程序是完全有可能在ram中调试的,只要axf除去调试信息后文件大小小于ram的大小即可。

调试信息有以下功用:

1、 可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。

2、 我们还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。

3、对变量进行跟踪(利用Watch & Call Stack Window)。

调试信息虽然有用,但程序功能实现后,在目标文件和库中减少调试信息却是非常有益的。减少调试信息可减少目标文件和库大小、加快链接速度、减小最终镜象代码。以下几种方法可用来减少每个源文件产生的调试信息:

1、避免在头文件中条件性使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的。

2、更改C/C++源文件,使#included包含的所有头文件有相同顺序。

3、尽量使用数量较多的小头文件而不是较大的单一头文件,这有利于链接器获取更多的通用块。

4、程序中最好只包含必须用到的头文件。避免重复包含头文件,可使用编译器选项--remarks来产生警告信息;

注意:

(1)axf和elf都是编译器生成的可执行文件。区别是:ADS编译出来的是AXF文件。gcc编译出来的是ELF文件。两者虽然很像,但还是有差别的。这是文件格式的差别,不涉及调试格式。

(2)axf/elf是带格式的映象,bin是直接的内存映象的表示。

(3)Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。

bin、hex、elf、axf文件的区别相关推荐

  1. 将FPGA MCS 文件转成BIN (HEX or EXO) 文件

    使用TCL命令promgen,如: promgen -p bin -r test.mcs -o mytest.bin

  2. 一文弄懂BIN、HEX、AXF、ELF文件格式的区别

    数据量比较 从存储数据的信息量上看:ELF>AXF>HEX>BIN,所以这也就确定了只能将大信息量的文件格式向小信息量的文件格式转换,如只能将HEX文件转换为BIN文件,当然如果指定 ...

  3. .axf文件_Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  4. Hex、bin、axf、elf格式文件小结

    一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的目标代码映象.一般编程器均支持生成此种格式文件. ...

  5. bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒,滴水穿石非一日之功 文章目录 引言 文件分类 1.bin文件 2.hex文件 3.axf文件 4.elf文件 总结 参考资料:深度理解编译过程 参考资料:深度理解编译文件 引言 b ...

  6. axf文件、hex文件、bin文件区别

    axf文件.hex文件与bin文件都可以运行在stm32,都存储了源代码通过编译器生成的机器码. axf文件:编译默认生成的文件,包含代码数据和调试信息,在MDK里进行debug调试用的文件. hex ...

  7. ARM:ELF bin Hex axf

    前言: PC平台流行的可执行文件格式(Executable File Format),主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable ...

  8. HEX和BIN文件的区别

    上一篇文章中演示的是裸板开发过程中可能遇到的两个问题的解决办法. 1,是在keil中编写程序并编译连接成可以下载到开发板的  .hex 文件,然后用jlink仿真器下载:2,是在ubuntu中编写编译 ...

  9. elf文件解析以及和bin文件的区别

    其实是想搞嵌入式的,但是总是要补补这里的知识补点那里的知识 1.ELF的分类 现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE和Linux的ELF,他们都是COFF ...

  10. .axf文件_干货!STM32晶振的更改,BIN文件的生成

    STM32因为硬件设计的不同,要根据实际安装晶振修改程序参数, 一般使用的晶振是8M,如果遇到使用24M晶振的时候程序配置要怎么去修改呢? 一共有两处需要修改,如果是24M就把这个修改为24,同理8M ...

最新文章

  1. Linux下如何测试及使用USB转串口线
  2. 零基础学python看什么视频-零基础自学Python是看书还是看视频?
  3. The Relation Between Gradient Descent and Cost Funtion(To be continued)
  4. 教你 7 招,迅速提高服务器并发能力!
  5. java word 加密_如何通过Java实现加密、解密Word文档
  6. 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用,如果顺序容器是const的对象,那么返回的是const的引用
  7. php socket 效率,php socket 模型及效率问题
  8. Docker中数据管理
  9. archery docker部署
  10. 你会换吗?报告称将有大批iPhone用户升级苹果5G新机
  11. dell mobile connect 兑换码_剑与远征万圣节兑换码是什么?剑与远征2020万圣节兑换码使用解析...
  12. 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和畅享20se哪个好 参数区别对比评测...
  13. Roling in the deep
  14. 每日算法系列【LeetCode 907】子数组的最小值之和
  15. 【MFC】如何使用MFC?MFC如何编写界面?MFC使用零基础教程
  16. Mosquitto PHP 插件安装使用及中文手册
  17. matlab 正则化表达式_MatLab归一化(正则化)函数
  18. 淘宝店铺排名还在用老方法吗,优化店铺排名方法是否正确?
  19. 关于移植人脸识别功能到linux开发板
  20. Loj一本通刷题记录

热门文章

  1. pic32用PICKIT3烧写bootloader
  2. leetcode 1818 绝对差值和
  3. 什么是主数据,如何做好主数据管理?
  4. 主数据管理功能模块、实施、提供厂商
  5. 无人驾驶(一)---汽车can总线通信之 peak pcan驱动安装与通信
  6. Windows NT 架构
  7. NPS 3.0:净推荐值的补充性财务指标 - 赢得性增长率(EGR)
  8. 软件测评师的一些重点①
  9. JAVA 使用 pdfbox实现打印 PDF 文件 (横版,竖版)
  10. SLA技术3D打印机的原理