既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
一旦出现段地址或者线性地址,之后所有数据都要加偏移地址,直到出现一个新的段地址或者线性地址,再重新变更偏移地址。
数据物理地址 = 线性地址左移16位+段地址左移4位+偏移地址。
示例:
:020000040108EA 线性偏移地址:0x0108
:0200000212FFBD 扩展段地址:0x12FF
:0401000090FFAA5502 数据地址:0x0100
基地址:0108左移16位为0x01080000;
扩展段地址:12FF左移4位为0x00012FF0;
下一行数据的偏移地址:0x0100
实际物理地址:0x01080000 + 0x00012FF0 + 0x0100 = 0x010930F0
举例分析:某工程代码的hex文件局部内容:
:02000004003DBD①
:04801000007DF9A155②
:20801200FF5A8EA4C5A492ABEC079CFF88A992859687000EFFFE92AB88A9A9A90FA6EC10AE③
:2080220093AAEC0EA9A99DFF5CA876BFFFFE92859687000EFFFE92859687000CFFF88AA043④
…
:200EC4008E77003D8E7E003D8E86003D8EB5003D8EE4003D8EFB003D8F2A003D8F5A003D21
:140ED4008F8A003D8FB9003D8FE8003D9017003D9046003D84
:00000001FF
1.:02000004003DBD**(实质为“十六进制”表达形式:0x02,0x00,0x00,0x04,0x00,0x3D,0xBD)**
释义:02表示该行数据的长度(字节数);
0000表示该行数据的起始地址(若该行数据的数据类型为00,则为偏移地址);
04表示该行数据的数据类型[1];
0x00,0x3D为数据[2];
0xBD为校验和[3]。
**2.**每行数据的起始地址计算:
第①行数据基地址(首行):0x0000 +(0x003D << 16)= 0x003D0000
第②行数据基地址:0x003D0000 + 0x8010 = 0x003D8010
第③行数据基地址:0x003D0000 + 0x8012 = 0x003D8012
第④行数据基地址:0x003D0000 + 0x8022 = 0x003D8022
注释:[1].“00”Data Rrecord:数据记录
“01”End of File Record::表征该.hex文件结束
“02”Extended Segment Address Record:标识扩展段地址记录
(后面所有数据地址需要加上段地址左移4位)
“03”Start Segment Address Record:起始/开始段地址记录
(大部分hex中不使用该记录类型,关于该记录类型的描述很少,具体作用不详)
“04”Extended Linear Address Record:标识扩展线性地址记录
(后面所有数据地址+线性地址左移16位,将该地址左移16 位后作为基地址,并且表示在下一个04类型行出现之前都要使用该地址作为基地址来使用。)
“05”Start Linear Address Record:起始/开始线性地址记录
(程序/函数入口地址,程序入口地址未必是main函数地址)
[2]. 十六进制数据:字节顺序根据芯片大小端和字长决定。
处理器若为大端存储,高字节在前,低字节在后(如NXP的5744P);
小端存储,则低字节在前,高字节在后(如STM32、DSP)。
示例:: 0401000090FFAA5502
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新