hex、bin、elf、axf文件区别
stm32编译的二进制程序的格式
stm32编译的二进制程序的格式在STM32编译的二进制程序格式方面,主要参考内容如下:1. ELF(Executable and Linkable Format)格式:ELF是一种可执行文件格式,用于将编译后的程序转换为二进制文件。
它定义了如何组织和加载可执行文件的各个部分,包括代码段、数据段、符号表等。
ELF格式具有良好的可扩展性和灵活性,可以适应不同的硬件和目标平台。
2. HEX(Intel Hex)格式:HEX格式是一种常用的非执行文件格式,用于表示二进制数据。
它将数据以十六进制的形式表示,并在文件中以行为单位进行存储。
每行包含数据的起始地址、数据长度、数据本身和校验和等信息。
HEX格式通常用于将二进制程序下载到STM32芯片中。
3. BIN(Binary)格式:BIN格式是一种简单的二进制文件格式,直接将二进制数据以字节序列的形式存储在文件中。
它没有头部信息,也没有指示地址和长度的字段,只包含纯粹的二进制数据。
BIN格式适用于将程序直接烧录到STM32芯片的存储器中。
4. SREC(Motorola S-record)格式:SREC格式是一种用于表示二进制数据的文件格式,广泛应用于早期的Motorola微处理器和微控制器。
它将数据以ASCII字符的形式表示,并在文件中以行为单位进行存储。
每行包含数据的类型、起始地址、长度、数据本身和校验和等信息。
SREC格式通常用于将二进制程序下载到STM32芯片中。
除了这些常见的二进制程序格式,STM32编译还可以生成其他格式的输出文件,例如:5. IHEX(Intel Hex Extended)格式:IHEX格式是对HEX格式的扩展,增加了附加数据和可执行代码等内容。
它可以更好地支持STM32芯片的特殊功能,如EEPROM和Flash的编程。
6. AOut(Assembler Output)格式:AOut格式是汇编器的输出格式,包含有关汇编指令和数据的详细信息。
单片机烧录用的hex文件,文件格式解析(转载)
单⽚机烧录⽤的hex⽂件,⽂件格式解析(转载)含有单⽚机的电⼦产品在量产的时候会⽤到.hex⽂件或者.bin。
hex是⼗六进制的,包含地址信息和数据信息,⽽bin⽂件是⼆进制的,只有数据⽽不包含地址。
任何⽂件都有⼀定的格式规范,hex⽂件同样具有完整的格式规范。
今天和⼤家分享⼀下,hex是如何解析的。
⼀、hex⽂件解析hex⽂件可以通过UltraEdit、Notepad++、记事本等⼯具打开,⽤Notepad++打开之后会看到如下数据内容。
使⽤Notepad++打开后会不同含义的数据其颜⾊不同。
每⾏数据都会有⼀个冒号开始,后⾯的数据由:数据长度、地址、标识符、有效数据、校验数据等构成。
以上图的第⼀⾏为例,进⾏解析:第1个字节10,表⽰该⾏具有0x10个数据,即16个字节的数据;第2、3个字节C000,表⽰该⾏的起始地址为0xC000;第4个字节00,表⽰该⾏记录的是数据;第5-20个字节,表⽰的是有效数据;第21个字节73,表⽰前⾯数据的校验数据,校验⽅法:0x100-前⾯字节累加和;其中,第4个字节具有5种类型:00-05,含义如下:字段含义00表⽰后⾯记录的是数据01表⽰⽂件结束02表⽰扩展段地址03表⽰开始段地址04表⽰扩展线性地址05表⽰开始线性地址单⽚机的hex⽂件以00居多,都⽤来表⽰数据。
hex⽂件的结束部分如下图所⽰。
最后⼀⾏的01表⽰⽂件结束了,最后的FF表⽰校验数据,由0x100-0x01=0xFF得来。
⼆、扩展地址细⼼的同学可能发现了,上⾯的地址都是两个字节,范围从0x000-0xFFFF,如果地址是0x17FFFF该怎么办呢?这就要⽤到扩展字段了,举例如下:第⼀⾏中,第⼀个字节为0x02,表⽰只有两个字节的数据,⽽扩展段的标识符为0x04表⽰后⾯的数据0x0800为扩展线性地址,基地址的计算⽅法为:(0x0800<<16)=0x08000000,在0x04标识段出现之前,下⾯的数据都是这个基地址。
【转】hex和bin文件格式的区别
【转】hex和bin⽂件格式的区别 Intel HEX⽂件是记录⽂本⾏的ASCII⽂本⽂件,在Intel HEX⽂件中,每⼀⾏是⼀个HEX记录,由⼗六进制数组成的机器码或者数据常量。
Intel HEX⽂件经常被⽤于将程序或数据传输存储到ROM、EPROM,⼤多数编程器和模拟器使⽤Intel HEX⽂件。
很多编译器的⽀持⽣成HEX格式的烧录⽂件,尤其是Keil c。
但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须⽀持的功能。
HEX格式⽂件以⾏为单位,每⾏由“:”(0x3a)开始,以回车键结束(0x0d,0x0a)。
⾏内的数据都是由两个字符表⽰⼀个16进制字节,⽐如”01”就表⽰数0x01;”0a”,就表⽰0x0a。
对于16位的地址,则⾼位在前低位在后,⽐如地址0x010a,在HEX格式⽂件中就表⽰为字符串”010a”。
下⾯为HEX⽂件中的⼀⾏: :10000000FF0462FF051EFF0A93FF0572FF0A93FFBC “:”表⽰⼀⾏的开始。
“:”后的第1,2个字符“10”表⽰本⾏包含的数据的长度,这⾥就是0x10即16个。
第3,4,5,6个字符“0000”表⽰数据存储的起始地址,这⾥表⽰从0x0000地址开始存储16个数据,其中⾼位地址在前,低位地址在后。
第7,8个字符“00”表⽰数据的类型。
该类型总共有以下⼏种: 00 ----数据记录 01 ----⽂件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录 这⾥就是0x00即为普通数据记录。
⾃后的32个字符就是本⾏包含的数据,每两个字符表⽰⼀个字节数据,总共有16个字节数据跟⾏⾸的记录的长度相⼀致。
最后两个字符表⽰校验码。
每个HEX格式的最后⼀⾏都是固定为::00000001FF 以上的信息其实就⾜够进⾏HEX转BIN格式的程序的编写。
⾸先我们只处理数据类型为0x00及0x01的情况。
单片机hex和bin文件的区别
单片机hex和bin文件的区别
ex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。
打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。
Hex文件可以按照如下的方式进行拆分来分析其中的内容:
例如:
:020*********FA , 我把它看做0x02 0x00 0x00 0x04 0x00 0x00 0xFA
第一个0x02 为数据长度。
紧跟着后面的0x00 0x00 为地址。
再后面的0x04为数据类型,类型共分以下几类:
‘00’ Data Record
‘01’ End of File Record。
hex 格式解析
hex 格式解析HEX格式是一种常用的二进制文件格式,主要用于存储程序和数据。
它是一种文本文件,由一行行符合HEX文件格式的文本组成。
在这些文本中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码字节组成。
HEX文件通常用于传输将被存储在ROM或EPROM中的程序和数据。
大多数EPROM编程器或仿真器使用HEX文件。
HEX文件格式主要有两种:Intel HEX和Motorola SREC(也称为Mot)。
Intel HEX文件由一行行符合Intel HEX文件格式的文本组成。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码字节组成。
Motorola SREC文件则是另一种HEX格式,它按照不同的编码方式组织数据。
要解析HEX文件,可以将其拆分成以下几个部分:1. 文件头:文件头包含文件类型、版本和起始地址等信息。
文件头通常位于文件的开头,用于指示文件的类型和结构。
2. 数据记录:数据记录是HEX文件中的基本单元,包含机器语言码和/或常量数据的十六进制编码字节。
每一行都是一个数据记录,它们按照顺序排列在文件中。
3. 数据记录之间的分隔符:HEX文件中的数据记录之间使用分隔符进行分隔。
常见的分隔符有:空格、制表符(TAB)、换行符(CR)等。
4. 文件尾:文件尾是HEX文件的最后一个部分,它表示文件的结束。
文件尾通常包含一个表示文件结束的特定字符或字节序列。
在解析HEX文件时,需要关注以下几个方面:1. 确定文件类型和格式:根据文件头信息,判断文件的类型和格式。
2. 提取数据记录:从文件中提取数据记录,解析记录中的机器语言码和常量数据。
3. 处理记录之间的分隔符:去除记录之间的分隔符,以便将数据记录合并为一个连续的数据流。
4. 检查文件尾:确认文件是否完整,以及文件尾是否正确。
5. 分析数据:根据解析出的数据记录,分析文件中的程序和数据。
hex和bin文件的由来
hex和bin文件的由来与计算机编程和嵌入式系统开发有关。
hex文件是以ASCII文本形式保存编译后的二进制文件信息。
它不仅保存了Bin文件的内容,还包含了一些配置信息。
hex文件使用“:”开始,之后是地址域、数据类型、数据域和校验和。
hex文件可以由下载器(如jlink)烧写到MCU的ROM中。
而Bin文件是MCU固件烧写的最终形式,也就是说MCU的ROM中烧写的内容完全就是Bin文件的内容。
hex文件可以说是MCU固件的中间形式,由下载器的软件根据hex文件生成Bin文件再烧写到MCU的ROM 中。
以上信息仅供参考,如需了解更多信息,建议查阅计算机编程和嵌入式系统开发的相关书籍或咨询专业人士。
axf elf 和bin 区别
axf elf 和bin 区别
(1)
axf和elf都是编译器生成的可执行文件,区别是:
ADS编译出来的是AXF(A rm e X ecutable F ile )文件。
gcc编译出来的是ELF(Executable and Linking Format)文件。
两者虽然很像,但还是有差别的。
这是文件格式的差别,不涉及调试格式。
(2)
axf/elf是带格式的映象
bin是直接的内存映象的表示
axf/elf文件里面包含了符号表,汇编等。
BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行。
在ADS下,axf文件可以直接用axd进行调试运行。
Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF 格式的,在Linux Shell下输入./test就可以执行。
bin文件是经过压缩的可执行文件,去掉ELF格式的东西,仅仅保留最纯的汇编。
在系统没有加载操作系统的时候可以执行。
在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF 格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
HEX文件和BIN文件格式的区别
HEX文件和BIN文件格式的区别HEX文件和BIN文件是我们经常碰到的2种文件格式。
下面简单介绍一下这2种文件格式的区别:1 -HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。
而烧写BIN文件的时候,用户是一定需要指定地址信息的。
3 -BIN文件格式对二进制文件而言,其实没有”格式”。
文件只是包括了纯粹的二进制数据。
4 -HEX文件格式HEX文件都是由记录(RECORD)组成的。
在HEX文件里面,每一行代表一个记录。
记录的基本格式为:+---------------------------------------------------------------+| RECORD | RECLEN | LOAD | RECTYPE | INFO or DA TA | CHKSUM || MARK ':' | | OFFSET | | | |+---------------------------------------------------------------+| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |+---------------------------------------------------------------+记录类型包括:'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾'04' Extended Linear Address Record: 用来标识扩展线性地址的记录'02' Extended Segment Address Record: 用来标识扩展段地址的记录在上面的后2种记录,都是用来提供地址信息的。
BIN、HEX、AXF、ELF文件格式有什么区别
BIN、HEX、AXF、ELF文件格式有什么区别数据量比较从存储数据的信息量上看:ELF>AXF>HEX>BIN,所以这也就确定了只能将大信息量的文件格式向小信息量的文件格式转换,如只能将HEX文件转换为BIN文件,当然如果指定了下载地址,也可以将BIN转换为HEX文件。
BIN文件bin文件是纯粹的机器码,没有地址信息,不能使用记事本直接打开,要使用bin文件阅读器才能打开,如果使用bin文件烧录程序时,需要指定下载地址。
一些下载器只能使用BIN文件进行下载,在进行OTA远程升级时必须使用bin文件。
HEX文件一般是指Intel标准的hex文件,可以使用记事本直接打开,是十六进制数据,包含了基地址、偏移量、校验和、文件开始和结束标志等信息,与bin文件最大的不同就是包含了下载地址。
由于hex文件是十六进制数据,而bin文件是二进制数据,如十六进制0xFF,用二进制表示为1111 1111,所以HEX文件要比bin文件大得多。
与axf文件相比,不含调试信息,不能用于调试。
AXF文件包含了调试信息,如进行在Keil环境使用Debug功能时,就是先将axf文件下载到芯片内,才能进行调试。
如使用J-Link的J-Scope功能时,必须使用axf文件。
ELF文件是由GCC编译器生成的。
elf文件可以直接转换为hex和bin,但hex和bin例如Linux系统下使用gcc指令gcc -o test test.c生成的elf文件,可以通过./test直接执行。
总结:1. bin文件可以由hex和axf文件转换而来。
2. axf文件包含了调试信息。
3. hex文件包含了烧录地址,而bin文件不含,需要指定地址。
欢迎各位朋友互相交流学习!。
十六进制文件格式
HEX格式内容含义HEX文件格式是我们经常遇到的一种文件格式,因为几乎所有的编程烧录文件都为HEX格式。
首先,HEX文件中是包含了地址信息的。
这和BIN文件不同,BIN文件中只包含了数据信息。
所以我们在烧写或者下载HEX文件的时候,一般不需要我们指定地址,但是在烧写BIN 文件的时候,用户是一定要指定地址信息的。
二、HEX文件都是由记录组成的。
它的每一行都是一个记录来的。
它是由任意数量的十六进制数组成。
每个记录包含五个域,它们以以下格式排列的::aabbbbcc[dd…]ee上面每一组不同的字母代表不同的一个域,每个字母代表一个十六进制的数字,每一个域至少由两个十六进制编码数字组成,每两个十六进制编码数字组成一个字节。
具体描述如下:1、每个HEX记录都由冒号开头;2、aa表示这个记录中的数据长度域,它代表记录当中数据字节[dd…]的字节数量。
3、bbbb是地址域,它代表记录当中数据的起始地址。
4、cc 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 –数据记录01 –文件结束记录02 –扩展段地址记录04 –扩展线性地址记录5、dd 是数据域,它代表一个字节的数据,一个记录可以有许多数据字节。
记录当中数据字节的数量必须和数据长度域(aa)中指定的数字相符。
6、ee 是校验和域,它表示这个记录的校验和。
校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。
比如:前面AduC7026的LED实验中的HEX文件内容为::020*********F2 。
1:1000000018F09FE518F09FE518F09FE518F09FE5C0 。
2:1000100018F09FE50000A0E118F09FE518F09FE5BB:100020004000080074030800700308006C03080017:100030006803080000000000640308006003080073:1000400078009FE50110A0E3041480E50110A0E30F:10005000081480E5F410A0E30C1480E560009FE52F:10006000DBF021E300D0A0E1040040E2D7F021E37F:1000700000D0A0E1040040E2D1F021E300D0A0E1F3:10008000040040E2D2F021E300D0A0E1800040E291:10009000D3F021E300D0A0E1040040E210F021E31E:1000A00000D0A0E11C009FE5010010E318E09F05CF:1000B00018E09F1510FF2FE1FEFFFFEAFEE7C046A4:1000C0000000FFFF900401003D010800B800080097:1000D000BD0008000000000000000000000000005B:1000E00000000000AA2108480160012107480160C2:1000F0005522074802600748016000210648016058:10010000F4210648016070471004FFFF1404FFFF4C:100110001804FFFF0404FFFF0804FFFF0C04FFFFA7:1001200004E005490A1C0139002AFBD1011C0138F1:100130000029F6D17047C046E8030000664806C8AB:100140000B1C134305D000230B70491C9142FBD1BB:10015000F5E76248C01C0323984306C80B1C1343F1:1001600006D00378401C0B70491C9142F9D1F1E78D:1001700000B5FFF7B7FFF0235948016899430160C4:10018000584A59480168114301600F2457480168D3:10019000A1430160564C5748016821430160534810:1001A0000168994301605348016811430160524A54:1001B0004E48016891430160504A4E48016811431E:1001C00001604F4A49480168914301604D4A4948DE:1001D0000168114301604C4A4C4801689143016039:1001E0004B4A4C480168114301604B4A474801683B:1001F00091430160494A4748016811430160484AF8:100200004248016891430160464A424801681143EF:1002100001604549454801604548FFF781FF454970:10022000454801604248FFF77BFF3F494248016073:100230003F48FFF775FF41493F4801603C48FFF7E1:100240006FFF3F493C4801603948FFF769FF3D496E:100250003D4801603648FFF763FF3C493A4801607A:100260003348FFF75DFF3A49374801603048FFF7F0:1002700057FF2D49374801602D48FFF751FF2D49A1:10028000354801602A48FFF74BFF27493248016093:100290002748FFF745FF29492F4801602448FFF709:1002A0003FFF27492C4801602148FFF739FF2549C6:1002B0002A4801601E48FFF733FF244927480160A0:1002C0001B48FFF72DFF2249244801601848FFF71B:1002D00027FF9EE700BDC046D4000800DC000800F0:1002E00000F4FFFF0000000220F4FFFF0CF4FFFF0A:1002F0000000000150F4FFFF000F000000000004A8:1003000000F000000000000800000F0008F4FFFFEC:100310000000001040F4FFFF0000F000000000208B:100320000000000F000000400000020024F4FFFF66:100330002C0100000000010054F4FFFF0000040045:10034000000008000000100044F4FFFF000020003F:100350000000400028F4FFFF58F4FFFF48F4FFFFBF:10036000FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEAF5:08037000FEFFFFEAFEFFFFEAB9:00000001FF它的第二行为::1000000018F09FE518F09FE518F09FE518F09FE5C0容易知道:它的ee为:C0,计算过程如下:C0=0x01+ not(0x10+0x00+0x00+0x00+0x18+0xF0+…+0xE5)文件结束(EOF)记录Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下::00000001FF其中:00 是记录当中数据字节的数量。
《hex文件(是文本文件)和bin文件(是二进制文件)的区别》
************************************************************************************ hex文件:是ASCII码的文本文件,由“:”开头的一行行的记录组成,每个记录的格式如下:***********************************************************************************:ll aaaa tt[dd...]cc记录格式中每个字符表示一个16进制数(4bit),前4个字节和最后一个字节是附加信息,[dd...]是数据(代码)格式含义解释如下:<:> --- hex记录开始符号<ll> --- dd的长度<aaaa> --- dd的地址<tt> --- hex记录的类型,含义如下:00 = data record (数据记录)01 = end-of-file record (文件结束记录)02 = extended segment address record (8086段地址记录,即4~19的高16位地址)04 = extended linear address record(80386线性地址记录,分成高16位和低16位分别表示,如下面的截图)<dd...> --- 数据cc --- 记录校验和************************************************************************************ bin文件:是二进制文件,只包含数据。
***********************************************************************************hex文件和bin文件的区别一个数据比如0x12h,在hex文件中,由两个字节的ASCII码组成:0x31、0x32表示.在bin文件中,直接是0x12.hex文件第二条记录的数据如黄色区域粉红框中的“04”,表示是记录是按照80386模式(32位地址)的记录;绿色框中的是高16位地址;蓝色框中的是低16位地址,当低16位地址超过0x0000FFFF时,会变为下图:bin文件用hex查看器打开,只包含hex文件的数据区。
hex、bin、elf、axf文件区别
hex,bin,axf,elf的区别一、HEX 和 BINHex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下: Intel hex 文件格式Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
Intel hex 文件全部由可打印的ASCII字符组成,如下例所示::2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a 7050dbd81:2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c7 00d0dbd2a:2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50a ee4f50874Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下::CCAAAARR...ZZ其中:CC本条记录中的数据字节数AAAA本条记录中的数据在存储区中的起始地址RR记录类型:00 数据记录 (data record)01 结束记录 (end record)02 段记录 (paragraph record)03 转移地址记录 (transfer address record)...数据域ZZ数据域校验和Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。
CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。
校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。
Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.Bin是直接的内存映象的表示。
hex与bin文件
1、HEX文件与BIN文件区别包含内容烧录信息文件存储形式文件大小HEX文件包括地址信息的一般都不需要用户指定地址以ASCII码形式表示十六进制的数值非实际数据大小BIN文件只包括了数据本身一定需要指定地址信息的十六进制数据实际数据大小BIN、hex 文件常用来保存单片机、ARM或其他处理器的目标程序代码,它保存物理程序存储区中的目标代码映象,一般的编程器都支持这种格式2、HEX文件2.1 HEX文件是用ASCII来表示十六进制的数值。
例如十六进制数值0x3F,用ASCII来表示就需要分别表示字符'3'和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间;2.2 Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。
打开后可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示);每一行代表一个记录;下列两行为hex的两条文件记录:020*********F2:100000003810002045010008F7020008F902000836记录头(:) 数据长度数据地址数据类型数据校验记录结束占用字节数1Byte1Byte2Byte1Byte nByte1Byte2Byte 例1 : 02 0000 04 0800F2 回车、换行例2 : 10 000000 3810002045010008F7020008F9020008 36 回车、换行此表格数据“例”为16进制数(以ASCII码形式显示)说明数据长度:数据所占的字节数据数据类型:1) 00' Data Record//数据记录2) '01' End of File Record//文件结束记录每一个HEX文件的最后一行。
例如::00000001FF这样的一行数据内容是固定的,数据长度为0,地址为03) '02' Extended Segment Address Record//扩展段地址记录4) '03' Start Segment Address Record//开始段地址记录5) '04' Extended Linear Address Record//扩展线性地址记录由于每行标识数据地址的只有2Byte,所以最大只能到7K,为了可以保存高地址的数据,就有了Extended Linear Address Record。
Intel HEX文件
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | '00' | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+
2 -
BIN文件格式 对二进制文件而言,其实没有”格式”。 文件只是包括了纯粹的二进制数据。
3 -
HEX文件格式 HEX文件都是由记录(RECORD)组成的。 在HEX文件里面,每一行代表一个记录。
记录的基本格式为:
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+
轻松理解bin、hex、axf和elf文件格式
elf
elf
ELF header ELF
Program header table
Section Section header table
Application Binary Interface ABI
Linux
ELF header
Program Header Table: segments
Section
3
axf
axf ARM
ARM
axf
bin hex
axf
axf
( Watch & Call Stack Window ) ( Watch & Call Stack Window) axf
4
elf
ELF Executable and Linkable Format
elf
UNIX USL
---
elf bin hex axf
bin hex axf elf STVP ST-LINK Utility STM32CubeProg
bin hex
0
bin hex
bin
hex
axf bin hex
axf
bin hex axf
bin
hex
axf
bin hex axf elf
bin axf Linux ELF Executable and Linkable Format
00
00040020B1010008FD020008BD020008 bin
44
44 = 0x100 - (0x10 + 0x04 + 0x20 + 0xB1 + 0x01 + 0x08 + 0xFD + 0x02 + 0x08 + 0xBD + 0x02 + 0x08 + 0x44) & 0xFF;
单片机下载文件:HEX文件和BIN文件的区别
单片机下载文件:HEX文件和BIN文件的区别
单片机程序写好之后,我们都要把程序下载到单片机的内存中,单片机才会按照程序员的逻辑执行命令实现功能。
之前也讲过下载单片机的几种方式,比如ISP 下载,JTAG 下载,下载文件的格式最常见的是hex 文件,这个格式大家都是知道的,还有一种bin 文件是单片机的下载文件。
下面介绍这两种格式的区别。
HEX 文件和BIN 文件是我们经常碰到的2 种文件格式。
下面简单介绍
一下这2 种文件格式的区别:
1. hex 文件包含地址信息。
在用ISP 方式烧写程序时,我们都有这样的经验:1)选择单片机型号;2)选择串口号;3)设置波特率(或者默认);4)选择下载的文件;5)点击下载按钮下载。
如下图所示。
经过这几步后,程序下载工作就完成了,在以上的步骤中我们并没有选择要把程序下载到单片机的哪块内存中,即不需要设置地址。
因为HEX 文件
内部的信息已经包括了地址。
而烧写BIN 文件的时候,用户是一定需要指定地址信息的。
单片机多下载hex 文件。
2. BIN 文件格式只包括了数据本身,没有包含地址
bin 文件本身只是数据,没有包含地址信息,所以在下载bin 文件时需要选择内存的起始地址和终止地址,即要把bin 文件下载到指定的内存空间。
通常需要指定程序内存地址的芯片为ARM 芯片和DSP 芯片。
3、HEX 文件和BIN 文件大小不一样
对于bin 文件,通过右键属性查看到的文件的大小就是数据的实际大小。
而对HEX 文件而言,你看到的文件大小并不是实际的数据的大小。
一是因为。
bin、hex、elf、axf文件的区别
bin、hex、elf、axf⽂件的区别1、bin Bin⽂件是最纯粹的⼆进制机器代码, 或者说是"顺序格式"。
按照assembly code顺序翻译成binary machine code,内部没有地址标记。
Bin是直接的内存映象表⽰,⼆进制⽂件⼤⼩即为⽂件所包含的数据的实际⼤⼩。
BIN⽂件就是直接的⼆进制⽂件,⼀般⽤编程器烧写时从00开始,⽽如果下载运⾏,则下载到编译时的地址即可。
可以直接在裸机上运⾏。
2.hexIntel hex ⽂件常⽤来保存单⽚机或其他处理器的⽬标程序代码。
它保存物理程序存储区中的⽬标代码映象。
⼀般的编程器都⽀持这种格式。
就是机器代码的⼗六进制形式,并且是⽤⼀定⽂件格式的ASCII码来表⽰。
HEX⽂件由记录(RECORD)组成。
在HEX⽂件⾥⾯,每⼀⾏代表⼀个记录。
每条记录都由⼀个冒号“:”打头,其格式如下: :BBAAAATTHHHH...HHHHCC BB:字节个数。
AAAA:数据记录的开始地址,⾼位在前,低位在后。
TT: Type 00数据记录,⽤来记录数据。
01记录结束,放在⽂件末尾,⽤来标识⽂件结束。
02⽤来标识扩展段地址的记录 04扩展地址记录(表⽰32位地址的前缀) HHHH:⼀个字(Word)的数据记录,⾼字节在前,低字节在后。
TT之后共有 BB/2 个字的数据。
CC: 占据⼀个Byte的CheckSum 举例分析: :020*********FA :10000400FF00A0E314209FE5001092E5011092E5A3 :00000001FF 分析如下: 第1条记录长度为0x02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。
数据为0000,校验和为FA。
从这个记录的长度和数据,我们可以计算出基地址为0X0000。
后⾯的数据记录都以此地址为基地址。
第2条记录长度为0x10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。
嵌入式bin文件和elf文件重点
和静态变量位于此处。 ZI-data:代表未初始化的读写数据,程序中定义了但没有初始化的全局变 量和静态变量位于此处。 一、下载到 FLASH 中的数据大小是:(Code + RO Data + RW Data)这个数 据关系到占用了多少单片机的 FLASH,关系到是否可以再添加程序。比如你 的单片机 FLASH 是 8K,编译程序后,发现程序已经 7K 了,但是工程还需 要写很多程序,那就可以考虑换个 FLASH 大点的单片机了。 二、程序运行是要在 RAM 中运行的大小是:(RW Data + ZI Data) 单片机 的两个重要参数,一个是上面的 FLASH 大小,一个是 RAM 大小。看了第一 条,就知道这条的重要性。 刚入门的,看程序的大小,会看 HEX 文件在 WINDOWS 中的占用大小来 确定占用 FLASH 的大小,是不对的。 这个 HEX 文件在电脑上的大小是 4.46KB,但是它只会占用单片机 FLSAH 的 1.57KB,如下图所示:
map 文件的作用是,我们可以根据程序产生错误地址在 map 文件中找到 相应的函数、变量地址。 (7)symbol 文件:目标文件的值、类型、名字,例如: 00000024 T cleanup_before_linux 00000024 是以 16 进制显示的其值,T 为类型表示此函数位于代码区,而 cleanup_before_linux 是其名字。可以看出,上面显示的 cleanup_before_linux 这个 symbol 的值实际上是该函数在 text section 中的偏移。但是,每个符号的 值的具体含义依其类型而异(类型见原文)。当然,对于每个符号的值,其类 型、其值以及它们所属的 section 是密切相关的。 (8)Code:代表执行的代码,程序中所有的函数都位于此处。 RO-data: 代表只读数据,程序中所定义的全局常量数据和字符串都位于 此处。 RW-data:代表已初始化的读写数据,程序中生成的工程中的 Listings 文件夹里面,有一个.map 后缀的文 件,拉到最后面,就有算好的大小)
ELF相比Hex、Bin文件格式有哪些与众不同?
ELF相比Hex、Bin文件格式有哪些与众不同?素材来源:综合CSDN编辑整理:strongerHuang关于计算机的文件有很多种,今天分享一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。
一、ELF文件简介ELF:Executable and Linkable Format,可执行与可链接格式。
首先,你需要知道的是所谓对象文件(Object files)有三个种类:1)可重定向文件:文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件。
(目标文件或者静态库文件,即通常后缀为.a和.o的文件)2)可执行文件:文件保存着一个用来执行的程序。
(例如bash,gcc等)3)共享目标文件:共享库。
文件保存着代码和合适的数据,用来被下连接编辑器和动态链接器链接。
二、ELF文件格式首先,ELF文件格式提供了两种视图,分别是链接视图和执行视图。
链接视图是以节(section)为单位,执行视图是以段(segment)为单位。
链接视图就是在链接时用到的视图,而执行视图则是在执行时用到的视图。
上图左侧的视角是从链接来看的,右侧的视角是执行来看的。
总个文件可以分为四个部分:•ELF header:描述整个文件的组织。
•Program Header T able: 描述文件中的各种segments,用来告诉系统如何创建进程映像的。
•sections 或者 segments:segments是从运行的角度来描述elf 文件,sections是从链接的角度来描述elf文件,也就是说,在链接阶段,我们可以忽略program header table来处理此文件,在运行阶段可以忽略section header table来处理此程序(所以很多加固手段删除了section header table)。
从图中我们也可以看出,segments与sections是包含的关系,一个segment包含若干个section。
有关IAP使用HEX或BIN文件格式的探讨
有关IAP使用HEX或BIN文件格式的探讨BIN优点,下载时二进制传输效率高,一个起始地址和长度(均可事先知道)搞定.因起始地址和长度在下载一开始就可以知道,所以只需要擦除实际代码大小的FLASH,避免大FLASH空间小代码时擦除FLASH的时间和FLASH损耗.缺点:当代码分段在不同地址时,如果中间有大片空地址,则需要填充,并被编程序到FLASH里.比如一段代码在0x0800 2000~0x0800 2F00,下一段代码在0x0800 4000~0x0800 4F00,那么BIN文件中0x0800 2F00到0x0800 4000这段未用的地址空间也需要填充数据(因BIN不含有地址,只能连续),这些无用的数据也需要传给MCU并被编程到FLASH.当这段空地址很大时,浪费的效率就很可观了.HEX优点,每个记录带有地址,按每个记录地址一个记录一个记录的编程.不方便整页整页的编程(不方便不是不可能,而是有点麻烦,因为有可能下一个记录的地址和这个记录地址中间有空闲地址).即使FLASH 中间有空闲未用地址空间也不需关注.缺点:ASCII码传输效率比BIN低一倍,由于并不知道总代码大小,需要擦除整个用户FLASH空间.所以HEX格式和BIN格式各有优劣.大家觉得用哪个格式好,抛砖引玉,讨论一下.我有个疑问,按照intel hex格式说明,普通数据记录最长可以有0xff个字节,实际上查看生成的HEX文件发现绝大部分是32个ASCII字节长度(16个实际2进制数据),有少量长度小于32个字节的普通数据记录.为什么没看到普通数据记录数据长度大于16字节的?hex格式是intel在很久很久很久以前的格式,那时候还没有现在的UE/WinHex等Hex Editor软件hex格式其中的一个目的是打印下来看的现在hex是在发挥余热,并且为了能继续跟上时代,还做了扩展,加segment段地址,这样寻址范围从16位到了32位bin有个最大的缺陷,就是没有起始地址以及范围的信息比如STM32的程序起始地址是0x08000000,难道在前面要填写这么多个空数据来保证地址正确bin不是一个严格意义上的文件格式,是没有文件格式的文件格式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hex,bin,axf,elf的区别一、HEX 和 BINHex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下: Intel hex 文件格式Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
Intel hex 文件全部由可打印的ASCII字符组成,如下例所示::2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a 7050dbd81:2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c7 00d0dbd2a:2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50a ee4f50874Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下::CCAAAARR...ZZ其中:CC本条记录中的数据字节数AAAA本条记录中的数据在存储区中的起始地址RR记录类型:00 数据记录 (data record)01 结束记录 (end record)02 段记录 (paragraph record)03 转移地址记录 (transfer address record)...数据域ZZ数据域校验和Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。
CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。
校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。
Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.Bin是直接的内存映象的表示。
简单介绍一下这2种文件格式的区别:1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。
而烧写BIN文件的时候,用户是一定需要指定地址信息的。
3 - BIN文件格式对二进制文件而言,其实没有”格式”。
文件只是包括了纯粹的二进制数据。
4 - HEX文件格式HEX文件都是由记录(RECORD)组成的。
在HEX文件里面,每一行代表一个记录。
记录的基本格式为:+---------------------------------------------------------------+| RECORD | RECLEN | LOAD | RECTYPE | INFO or DA TA | CHKSUM || MARK ':' | | OFFSET || | |+---------------------------------------------------------------+| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |+---------------------------------------------------------------+记录类型包括:'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾'04' Extended Linear Address Record: 用来标识扩展线性地址的记录'02' Extended Segment Address Record: 用来标识扩展段地址的记录在上面的后2种记录,都是用来提供地址信息的。
每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。
对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。
数据记录的具体格式:+---------------------------------------------------------------+| RECORD | RECLEN | LOAD | RECTYPE | INFO or DA TA | CHKSUM || MARK ':' | | OFFSET | '00'| | |+---------------------------------------------------------------+| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |+---------------------------------------------------------------+看个例子::020*********FA:10000400FF00A0E314209FE5001092E5011092E5A3:00000001FF对上面的HEX文件进行分析:第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。
数据为0000,校验和为FA。
从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。
后面的数据记录都以这个地址为基地址。
第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE 为00,说明该记录为数据记录。
数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。
这个记录的校验和为A3。
此时的基地址为0X0000,加上OFFSET,这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。
说明这个是一个END OF FILE RECORD,标识文件的结尾。
在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209F E5001092E5011092E5,其起始地址为0x44 - HEX文件和BIN文件大小有区别HEX文件是用ASCII来表示二进制的数值。
例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。
而对HEX文件而言,你看到的文件大小并不是实际的数据的大小。
一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。
二、AXF和ELFaxf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面。
在调试的时候,这些调试信息是不必下到RAM中去的,真正下到RAM中的信息仅仅是可执行代码。
所以如果ram的大小小于axf文件的大小,程序是完全有可能可以在ram中调试的,只要axf除去调试信息后的大小小于ram的大小就行了。
调试信息包含以下内容:1、可以将源代码包括注释夹在反汇编代码中,并且我们可以随时切换到源代码中调试,2、我们还可以对程序中的函数调用情况进行跟踪(用Watch & Call StackWindow查看)。
3、对变量进行跟踪(用Watch & Call Stack Window查看)。
如何减少调试信息如果希望带调试信息,那么在目标文件和库中减少调试信息是非常有益的,减少调试信息可以减少目标文件和库的大小、加快了链接速度、减小最终镜象的代码。
以下几种方法可用来减少每个源文件产生的调试信息:1.避免在头文件中条件使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的;2.更改C/C++源文件,以使#included包含的所有头文件有相同的顺序;3.将头文件信息分成几个小块,也就是,尽量使用数量较多的小头文件而不使用较大的单一头文件,这有利于链接器能获取更多的通用块;4.在程序中只包含那些必须要用到的头文件;5.避免重复包含头文件,可使用编译器选项--remarks来产生警告信息;6.使用编译命令行选项--no_debug_macros以从调试表中丢弃预处理宏定义。
Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。
在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行【转】axf elf 和bin 区别(1)axf和elf都是编译器生成的可执行文件,区别是:ADS编译出来的是AXF文件。
gcc编译出来的是ELF文件。
两者虽然很像,但还是有差别的。
这是文件格式的差别,不涉及调试格式。
(2)axf/elf是带格式的映象bin是直接的内存映象的表示axf/elf文件里面包含了符号表,汇编等。
BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行。
在ADS下,axf文件可以直接用axd进行调试运行。
Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。
bin文件是经过压缩的可执行文件,去掉ELF格式的东西,仅仅保留最纯的汇编。
在系统没有加载操作系统的时候可以执行。
在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
=====================================以下转载供参考:嵌入式开发的时候,我们的编译一个*.S文件,并最终生成bin文件,编译命令大致如下:CC=arm-softfloat-linux-gnu-gccLD=arm-softfloat-linux-gnu-ldOBJCOPY=arm-softfloat-linux-gnu-objcopy$(CC) -g $(CFLAG) -c boot.S #先将boot.S文件生成boot.o$(LD) -g -Bstatic -T$(LDFILE) -Ttext 0x12345600 boot.o --start-group -Map boot.map -o boot.elf #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell 下输入./test就可以执行。