转Keil生成的Hex文件详解
HEX文件格式分析

HEX文件格式分析一个HEX文件通常由多个记录(record)组成,每个记录有不同的用途和格式。
下面是HEX文件的格式详解:1. 记录类型(Record Type):每个记录都有一个记录类型字段,用来指定该记录的类型。
常见的记录类型有:a. 数据记录(Data record):用来存储机器指令的二进制数据。
b. 扩展线性地址记录(Extended Linear Address record):用来指定下一条数据记录加载的地址。
c. 起始线性地址记录(Start Linear Address record):用来指定程序的起始地址。
2. 记录长度(Record Length):记录长度字段指定了该记录的数据字段的长度(以字节为单位)。
3. 起始地址(Start Address):起始地址字段指定了该记录对应的数据在内存中的起始地址。
4. 数据字段(Data Field):数据字段包含了该记录对应的机器指令的二进制数据。
每个数据字段的长度由记录长度字段指定。
5. 校验和(Checksum):校验和字段用来验证该记录的数据的完整性。
它是将记录类型、记录长度、起始地址和数据字段中的数据累加,并对256取模后的结果的补码。
```:LLAAAARRDDDDDDDD...DDCC```其中,符号“:”表示记录起始标志;LL表示记录长度;AAAA表示起始地址;RR表示记录类型;DD表示数据字段;CC表示校验和。
1.解析HEX文件:读取HEX文件的每个记录,根据记录类型字段和数据字段进行解析。
2.加载机器指令:将HEX文件中的机器指令加载到指定的内存地址中。
3.执行程序:将内存中的指令送入处理器执行。
HEX文件格式可以方便地将机器语言程序存储在文本文件中,以便于传输和共享。
它在嵌入式系统开发和固件升级等领域得到广泛应用。
通过对HEX文件进行解析和加载,我们可以将机器语言程序加载到目标设备上,并实现特定的功能。
总结:HEX文件格式是一种用于存储机器语言程序的文件格式,它由记录类型、记录长度、起始地址、数据字段和校验和等字段组成。
单片机烧录用的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的情况。
MDK生成BIN和HEX

3.0.Keil MDK-ARM uVision V4.53下生成BIN
3.1.Keil MDK-ARM缺省安装后,目标软件编译结果只有axf
3.2.鼠标右键点选MDK-ARM的Project栏里"Target 1"
A."–"不对,是"-"
B.是两个,不是一个
--------------------------------------------------
4.0.参考资料
4.1.如何用MDK(keil)生成.bin文件
作者:kanger/baokang506@
2.2.鼠标右键点选MDK-ARM的Project栏里"Target 1"
2.3.点选"Target 1"的"Options for Target..."
2.4.设置_Options for Target... 设置界面 Output栏
2.5.选择_Create Exectable:.\XXXXX
FromELF: creating hex file...
User command #1: fromelf.exe --bin --output
XXXXX.bin XXXXX.axf
"XXXXX.axf" - 0 Error(s), 0 Waring(s)
**************************************************
==================================================
单片机常用输出格式--Hex-80(Hex 386)

单片机常用输出格式--Hex-80(Hex 386)单片机常用输出格式--Hex-80(Hex 386)我前面曾经介绍了Intel 32 bit Hex,但并不是所有的.hex 文件都属于这种格式。
Keil 输出的hex 文件则是另外一个类似的格式Hex-80。
与前者类似,纪录的格式为::LLAAAARRDDDDDDDDCCLL: Length field-长度段:数据段(D)的字节数AAAA: Address field-地址段:数据段第一个字节的地址RR: Record type- 纪录类型,00 代表数据,01 代表纪录结束DD..: Data field-数据段CC: CheckSum field-校验和:计算方法是将本条记录冒号开始的所有对字母所表示的十六进制数字都加起来然后模除256 得到的余数最后求出余数的补码即是本效验字节cc.例子::011B50002272LL = 0x01AAAA =0x1B50RR=0x00DD=0x22CHECK SUM = ~((0x01+0x1B+0x50+0x22)&0xFF)+1 = 0x72 与Intel 32 不同,由于Hex-80 用于64K 地址范围以内的系统,所以没有基址设定的指令。
如果在Keil-51 中,用跨BANK 的方式超过了64K,编译器会产生多个HXX 文件来标识BANK。
如:test.h00test.h01test.h02 分别在每个bank 的视角来产生64K 代码空间。
对于Common Bank 由于其在每个Bank 的视角中都存在,所以在几个文件中都有同样的存在,这点要求编程人员注意。
还有,貌似Keil 产生的Hex-80 文件地址并不连续~天晓得Keil 为什么不规整一下。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
c51hex文件反编译方法

c51hex文件反编译方法
C51是一种用于嵌入式系统开发的微控制器架构,其使用的是Keil C51编译器生成的HEX文件。
要对C51的HEX文件进行反编译,需要使用专门的反汇编工具,比如IDA Pro、Ghidra等。
这些工具
可以将HEX文件转换为汇编代码,但需要注意的是,由于HEX文件
是经过编译的机器码,反编译后的汇编代码可能不会完全还原原始
的C源代码。
另外,需要注意的是反编译HEX文件可能涉及到版权和法律问题,因为对于商业软件而言,其源代码通常是受到保护的。
在进行
反编译之前,务必确保你有合法的权限进行这样的操作。
总的来说,对于C51的HEX文件进行反编译是一项复杂的任务,需要使用专业的工具和合法的权限。
希望我的回答能够帮到你。
keil工程文件解析

keil工程文件解析
Keil工程文件是用于管理和配置工程项目的文件集合,主要在嵌入式系统开发中使用。
一个Keil工程通常包含多个文件,这些文件可以分为两类:工
程文件和源码编译文件。
工程文件主要包括.uvprojx、.uvoptx、.uvguix及.crf、.dep等。
具体来说:
1. .uvprojx文件:这是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类型、工程包含了哪些源文件等内容。
2. .uvoptx文件:这个文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等。
3. .uvguix文件:这个文件记录了Keil工程的GUI布局,如代码编辑区窗
口的大小、编译输出提示窗口的位置等等。
此外,一个Keil工程中还包括编译后的程序文件,如hex和bin文件等。
hex文件是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH的哪个地址和二进制代码数据。
bin文件则是可执行文件,记录了程序的二进制代码。
这些文件都有其特定的用途和重要性,共同构成了一个完整的Keil工程。
HEX文件格式

Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
Intel HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Int el HEX文件。
很多编译器的支持生成HEX格式的烧录文件,尤其是Keil c。
但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须支持的功能。
HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d, 0x0a)。
行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0 x01;”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的情况。
0x02表示对应的存储地址超过了64K,由于我的编程器只针对64K以下的单片机,因此在次不处理,0x04也是如此。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转Keil生成的Hex文件详解
Keil Uv2 生成Hex文件详细过程
2009-12-31 15:38:44| 分类:51单片机|
步骤:
1.打开Keil Uv2开发环境
2.现在开始新建项目,Project->New Project,确定项目保存路径,并给新建项目命名,之后点选“保存”。
3.之后选定CPU,这以之后学习用到的A T89S51单片机为例,选择Atmel->89C51;
4.项目建好后,这样的空项目是无用的,接下来需要给项目添加文件,选中“Source
Group1”,右键,在弹出对话框里选中“Add Files to Group ‘Source Group1’”,如图:
5.这时已经可以在新增文件上进行编程,很多奇思异想都可以实现拉,条件是编出来的程序,机器能识别,不然。
嘿嘿。
程序编写出来了,直接编译的执行程序,51单片机是不认的,就像对一个只会中国话的中国老太太说英语,这就产生了语言障碍,所以还得翻译成“.hex”格式文件,那么这里别忘了设置Target和Output两个属性,如图:
这时再按“F7”开始编译,如果程序没写错,就能看到
“Build target ‘Target 1’
Compiling
……
– 0 Error(s) ,0 Warning(s).”
那么恭喜,你已经生成了可以在单片机上跑的程序了!。