Hex文件格式解析

Hex文件每行数据组成

Hex文件格式解析_第1张图片
Hex文件格式解析_第2张图片

字符串个数 1 2 4 2 N*2 2
数据说明 : 数据长度 N 地址 数据类型 数据 校验

数据长度

pHexFileFormat->DataSize

16进制:0~FF

地址

pHexFileFormat->OffsetAddr

16进制:0~FFFF
数据类型为 01、02、03、04、05地址被忽略通常为0000
当数据类型为00地址为后面 数据偏移地址

数据类型

pHexFileFormat->DataType

数据类型有:0x00 0x01 0x02 0x03 0x04 0x05 用于标识数据作用

  1. '00’数据记录:用来标识数据
  2. '01’文件结束记录:用来标识文件结束,通常在文件的最后
  3. '02’扩展段地址记录:用来标识扩展段地址。这个扩展段地址一直有效直到读到下一个扩展段地址记录
  4. '03’开始段地址记录:用来标识开始段地址
  5. '04’扩展线性地址记录:用来标识扩展线性地址。这个扩展线性地址一直有效直到读到下一个扩展线性记录
  6. '05’开始线性地址记录:用来标识开始线性地址
    注:01 有的软件识别,有的软件忽略
    03、05用于标记程序运行入口地址,只做烧录可以忽略

数据实际地址

基地址 = 扩展段地址 << 4 + 扩展线性地址 << 16

02、04 数据部分用于标记后续00所记录数据的基地址,当00所记地址超过 FFFF 时,则需要重新标记基地址

实际地址 = 基地址 + 偏移地址

Hex文件格式解析_第3张图片

pHexFileFormat->Addr_Type04=0x0001<<16
pHexFileFormat->Addr_Type02=0x0010<<4
pHexFileFormat->OffsetAddr=0x0000
pHexFileFormat->AbsAddr=pHexFileFormat->OffsetAddr+pHexFileFormat->Addr_Type02+pHexFileFormat->Addr_Type04

校验

:020000040001F9 为例

Sum=0x02+0x00+0x00+0x04+0x00+0x01=0x07
CheckSum=0x100-Sum=0xF9

tempCheckSum = pHexFileFormat->DataSize + (pHexFileFormat->OffsetAddr & 0xff) + ((pHexFileFormat->OffsetAddr >> 8) & 0xff) + pHexFileFormat->DataType;
for (i = 0; i < pHexFileFormat->DataSize; i++)
{
	tempCheckSum += pHexFileFormat->bData[i];
}
tempCheckSum = 0x100 - tempCheckSum;

if (tempCheckSum != pHexFileFormat->CheckSum)
{
	//Error
}

你可能感兴趣的:(Hex文件解析,c语言,其他)