Hex文件分析

本文介绍了Intel HEX和Motorola SREC两种不同的十六进制文件格式。Intel HEX文件由ASCII文本组成,每行包含数据记录、地址、类型等信息,主要用于存储ROM或EPROM中的程序和数据。SREC(S-record)由摩托罗拉创建,同样用于微控制器编程,其结构包括记录类型、字节数、地址、数据和校验域。两种格式在编程和数据传输中发挥着重要作用。
摘要由CSDN通过智能技术生成

Hex格式文件有两种,一种是Intel的Intel HEX,另一种是Motorola(摩托罗拉)的SREC(又称MOT)。

Intel HEX

IntelHEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个ASCII HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。

//Intel HEX格式

//行数据

:   10   0000  00  C2020000C2020000C2020000C2020000  E0


iHex文件一行为单位,分为6个部分。

第一部分是iHEX文件的起始格式,文件一开始应该是一个冒号作为起点;

第二部分的两码所代表的是该行总共具备多少个字节的数据,是第五部分包含多少字节的数据;以本行为例,应该有16个字节,因为10H换算成十进制应该是16;

第三部分的四码所代表的地址域是放置数据的开始位置,本行的数据应该是放置在0000H~000FH 这段地址中;

第四部分的两码是检查码,所代表的是该行数据类型。数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。

'00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

解析hex文件的代码可以分为以下几个步骤: 1. 打开hex文件,读取数据 ``` file = open("test.hex", "r") data = file.readlines() ``` 2. 解析每行数据 ``` for line in data: # 去除换行符 line = line.strip() # 解析行号、数据类型、地址和数据 line_no = int(line[1:3], 16) data_type = int(line[7:9], 16) addr = int(line[3:7], 16) line_data = line[9:-2] # 根据数据类型解析数据 if data_type == 0: # 数据记录 for i in range(0, len(line_data), 2): byte = int(line_data[i:i+2], 16) # 处理数据 elif data_type == 1: # 结束记录 break elif data_type == 2: # 扩展线性地址记录 addr_offset = int(line_data, 16) * 16 elif data_type == 3: # 扩展段地址记录 pass else: # 其他记录类型 pass ``` 3. 处理数据 根据数据类型解析出的数据,可以进行相应的处理。例如,如果是数据记录,可以将数据写入指定的内存地址;如果是扩展线性地址记录,可以计算出偏移地址。 完整的代码示例: ``` file = open("test.hex", "r") data = file.readlines() addr_offset = 0 for line in data: # 去除换行符 line = line.strip() # 解析行号、数据类型、地址和数据 line_no = int(line[1:3], 16) data_type = int(line[7:9], 16) addr = int(line[3:7], 16) + addr_offset line_data = line[9:-2] # 根据数据类型解析数据 if data_type == 0: # 数据记录 for i in range(0, len(line_data), 2): byte = int(line_data[i:i+2], 16) # 处理数据 print(hex(addr), hex(byte)) addr += 1 elif data_type == 1: # 结束记录 break elif data_type == 2: # 扩展线性地址记录 addr_offset = int(line_data, 16) * 16 elif data_type == 3: # 扩展段地址记录 pass else: # 其他记录类型 pass file.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值