当前位置: 首页 > news >正文

实现STM32烧写程序-(3) Hex文件结构

简介

要对STM32进行更新动作, 就需要对程序文件进行解析, 大部分编译的生成程序文件是Hex或者Bin, 先来看看Hex的结构吧。

资料

Hex文件 简介

Hex文件格式最早由Intel公司于1973年创建。它最初是为了在Intel 8080微处理器上存储和传输二进制数据而设计的。随后,Hex文件格式成为了一种通用的标准,被广泛应用于嵌入式系统和微控制器编程中。
虽然Hex文件格式最初由Intel创建,但随着时间的推移,其他公司和组织也采用了这种格式,并对其进行了扩展和改进。因此,Hex文件格式已经成为一种行业标准,被广泛支持和使用。
需要注意的是,Hex文件格式的具体规范和细节可能会因不同的应用和实现而有所差异。因此,如果您在特定的应用或设备中使用Hex文件格式,建议查阅相关文档或规范,以确保正确解析和使用Hex文件。

Hex 文件资料

Hexadecimal (Intel-Format) File (.hex) Definition

Hex Format.pdf

这份是比较简单易了解的 : What is the format of Intel Hexadecimal files (.hex)?

抄录如下:
一个示例的HEX文件如下所示:
:10008000AF5F67F0602703E0322CFA92007780C361
:1000900089001C6B7EA7CA9200FE10D2AA00477D81
:0B00A00080FA92006F3600C3A00076CB
:00000001FF
+++++++++++++++++++++++++++++++++++++++++++
该文件的格式如下:
第一个字符(:)= 记录的开始
接下来两个字符 = 记录长度(在此示例中为10h, 实际数据长度)
接下来四个字符 = 载入地址/偏移(在此示例中为0080h)
接下来两个字符 = 记录类型/本段数据的类型(00/01/02/03/04/05)(见下文)
剩余字符 = 实际数据(数据量字节数由前面记录长度 * 2, 文件存储是字符, 两个字符组成Hex)
最后两个字符 = 校验和(即所有字节的和,校验和为00)
++++++++++++++++++++++++++++++++++++++++++
文件的最后一行是特殊的,始终以上述形式结束。HEX记录类型如下所示:
00 = 数据记录
01 = 文件结束记录
02 = 扩展段地址记录
03 = 起始段地址记录
04 = 扩展线性地址记录
05 = 起始线性地址记录

数据类型说明

00 数据记录

如下是两端 数据记录

:10000000A005002001010008E31400087B1400088B
:10001000E11400083D0700087D16000800000000FC

切分一下

记录行号记录标志记录长度偏移数据类型数据checksum
1:10000000A005002001010008E31400087B1400088B
2:10001000E11400083D0700087D16000800000000FC

01 文件结束记录

表示这个文件到此就是最后一段有效数据了, 例如:
在这里插入图片描述
上面展示的就是最后一行数据,:00000001FF, 切分一下

记录行号记录标志记录长度偏移数据类型数据checksum
1:00000001FF

02 扩展段地址记录

扩展段地址记录(Extended Segment Address Record):扩展段地址记录用于扩展加载地址的位数。它的记录类型为"02",地址字段表示扩展的段地址。扩展段地址记录通常与数据记录一起使用,以支持更大的地址空间。
扩展段地址记录的作用是扩展加载地址的位数,以支持更大的地址空间。在解析HEX文件时,当遇到扩展段地址记录时,可以将段地址的高16位设置为该记录中指定的扩展段地址。
请注意,扩展段地址记录通常与其他记录类型(如数据记录)一起使用,以确定程序的加载地址和执行地址。

格式:
在这里插入图片描述

03 起始段地址记录

起始段地址记录(Start Segment Address Record):起始段地址记录用于指示程序的起始执行地址。它的记录类型为"03",地址字段表示起始执行地址。
起始段地址记录的作用是指示程序的入口点,即程序应该从哪个段地址和偏移量开始执行。在解析HEX文件时,当遇到起始段地址记录时,可以将程序的执行地址设置为该记录中指定的段地址和偏移量。
请注意,起始段地址记录通常与其他记录类型(如数据记录)一起使用,以确定程序的加载地址和执行地址。

格式:
在这里插入图片描述

04 扩展线性地址记录

扩展线性地址记录(Extended Linear Address Record):扩展线性地址记录用于扩展线性地址的位数。它的记录类型为"04",地址字段表示扩展的线性地址。

格式 :
在这里插入图片描述在这里插入图片描述
切分:

记录行号记录标志记录长度偏移数据类型数据checksum
1:020000040800F2

扩展线性地址记录的作用是扩展线性地址的位数,以支持更大的地址空间。在解析HEX文件时,当遇到扩展线性地址记录时,可以将线性地址的高16位设置为该记录中指定的扩展线性地址。

请注意,扩展线性地址记录通常与其他记录类型(如数据记录)一起使用,以确定程序的加载地址和执行地址。

例如 拼接 第二行 0000 地址就是 0x0800 0000 =》 0x8000000 程序的加载地址

05 起始线性地址记录

起始线性地址记录(Start Linear Address Record):起始线性地址记录用于指示程序的起始执行地址。它的记录类型为"05,地址字段表示起始执行地址。
起始线性地址记录的作用是指示程序的入口点,即程序应该从哪个线性地址开始执行。在解析HEX文件时,当遇到起始线性地址记录时,可以将程序的执行地址设置为该记录中指定的地址。
请注意,起始线性地址记录通常与其他记录类型(如数据记录)一起使用,以确定程序的加载地址和执行地址。

格式 :
在这里插入图片描述
实例:
在这里插入图片描述
切分一下

记录行号记录标志记录长度偏移数据类型数据checksum
1:04000005080000EDFF

起始执行地址为080000ED,表示程序的起始执行地址是080000ED。

相关文章:

实现STM32烧写程序-(3) Hex文件结构

简介 要对STM32进行更新动作, 就需要对程序文件进行解析, 大部分编译的生成程序文件是Hex或者Bin, 先来看看Hex的结构吧。 资料 Hex文件 简介 Hex文件格式最早由Intel公司于1973年创建。它最初是为了在Intel 8080微处理器上存储和传输二进制数据而设计的。随后,Hex…...

精品量化公式——“区域突破”,应对当下行情较好的主图看盘策略

不多说,直接上效果如图: ► 日线表现 代码评估 技术指标代码评估: VAR1, VAR2, VAR3:这些变量是通过指数移动平均(EMA)计算得出的。EMA是一种常用的技术分析工具,用于平滑价格数据并减少市场“…...

自然语言处理5——发掘隐藏规律 - Python中的关联规则挖掘

目录 写在开头1. 了解关联规则挖掘的概念和实际应用1.1 关联规则挖掘在市场分析和购物篮分析中的应用1.2 关联规则的定义和基本原理1.3 应用场景2. 使用Apriori算法和FP-growth算法进行关联规则挖掘2.1 Apriori算法的工作原理和实现步骤2.2 FP-growth算法的优势和使用方法2.3 A…...

【记录】重装系统后的软件安装

考完研重装了系统,安装软件乱七八糟,用到什么装什么。在这里记录一套标准操作,备用。一个个装还是很麻烦,我为什么不直接写个脚本直接下载安装包呢?奥,原来是我太菜了还不会写脚本啊!先记着吧&a…...

Android 13 - Media框架(31)- ACodec(七)

之前的章节中我们解了 input buffer 是如何传递给 OMX 的,以及Output buffer 是如何分配并且注册给 OMX 的。这一节我们就来看ACodec是如何处理OMX的Callback的。 1、OMXNodeInstance Callback 这一节我们只大致记录Callback是如何传递给ACodec的。在之前的学习中我…...

快速了解VR全景拍摄技术运用在旅游景区的优势

豆腐脑加了糖、烤红薯加了勺,就连索菲亚大教堂前都有了“人造月亮”,在这个冬季,“尔滨”把各地游客宠上了天。面对更多的游客无法实地游玩,哈尔滨冰雪世界再添新玩法,借助VR全景拍摄技术对冬季经典冰雪体验项目进行全…...

分布形态的度量_峰度系数的探讨

集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点,还应掌握数据分布的形态。 描述数据分布形态的度量有偏度系数和峰度系数, 其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。 峰度系数反映分布峰的尖峭程度的重要指标. 当…...

HCIP 重发布

拓扑图&IP划分如下: 第一步,配置接口IP&环回地址 以R1为例,R2~R4同理 interface GigabitEthernet 0/0/0 ip address 12.1.1.1 24 interface GigabitEthernet 0/0/1 ip address 13.1.1.1 24 interface LoopBack 0 ip address 1.1.1.…...

FX图中的节点代表什么操作

在 FX 图中,每个节点代表一个操作。这些操作可以是函数调用、方法调用、模块实例调用,也可以是 torch.nn.Module 实例的调用。每个节点都对应一个调用站点,如运算符、方法和模块。 一.节点操作 下面是一些节点可能代表的操作: 1…...

【Java 设计模式】创建型之单例模式

文章目录 1. 定义2. 应用场景3. 代码实现1)懒汉式2)饿汉式 4. 应用示例结语 在软件开发中,单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。单例模式在需要控制某些资源,如数…...

FlinkAPI开发之窗口(Window)

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 窗口的概念 Flink是一种流式计算引擎,主要是来处理无界数据流的,数据源源不断、无穷无尽。…...

【Unity】Joystick Pack摇杆插件实现锁四向操作

Joystick Pack ​ 简介:一款Unity摇杆插件,非常轻量化 ​ 摇杆移动类型:圆形、横向、竖向 ​ 摇杆类型: Joystick描述Fixed固定位置Floating浮动操纵杆从用户触碰的地方开始,一直固定到触碰被释放。Dynamic动态操纵…...

29 旋转工具箱

效果演示 实现了一个菜单按钮的动画效果,当鼠标悬停在菜单按钮上时,菜单按钮会旋转315度,菜单按钮旋转的同时,菜单按钮旋转的8个小圆圈也会依次旋转360度,并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反&#xff0…...

WeNet2.0:提高端到端ASR的生产力

摘要 最近,我们提供了 WeNet [1],这是一个面向生产(工业生产环境需求)的端到端语音识别工具包,在单个模型中,它引入了统一的两次two-pass (U2) 框架和内置运行时(built-in runtime)…...

第九部分 使用函数 (四)

目录 一、foreach 函数 二、if 函数 三、call 函数 一、foreach 函数 foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile 中的 foreach 函数几乎是仿照于 Unix 标准 Shell(/bin/sh)中的 for 语句,或…...

一文读懂「Prompt Engineering」提示词工程

在了解提示过程之前,先了解一下什么是提示prompt,见最后附录部分 一、什么是Prompt Engingering? 提示工程(Prompt Engingering),也被称为上下文提示(In-Context Prompting)&#x…...

微信小程序(一)简单的结构及样式演示

注释很详细&#xff0c;直接上代码 涉及内容&#xff1a; view和text标签的使用类的使用flex布局水平方向上均匀分布子元素垂直居中对齐子元素字体大小文字颜色底部边框的宽和颜色 源码&#xff1a; index.wxml <view class"navs"><text class"active…...

【设计模式】外观模式

前言 1. 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个全局的访问点。 2. 工厂模式&#xff08;Factory Pattern&#xff09;&#xff1a;定义一个创建对象的接口&#xff0c;但由子类决定要实例化的类是哪一…...

优先级队列(Priority Queue)

文章目录 优先级队列&#xff08;Priority Queue&#xff09;实现方式基于数组实现基于堆实现方法实现offer(E value)poll()peek()isEmpty()isFull() 优先级队列的实现细节 优先级队列&#xff08;Priority Queue&#xff09; 优先级队列是一种特殊的队列&#xff0c;其中的元素…...

12-桥接模式(Bridge)

意图 将抽象部分与它的实现部分分离&#xff0c;使他们可以独立地变化 个人理解 一句话概括就是只要是在抽象类中聚合了某个接口或者抽象类&#xff0c;就是使用了桥接模式。 抽象类A中聚合了抽象类B&#xff08;或者接口B&#xff09;&#xff0c;A的子类的方法中在相同的场…...

Zookeeper+Kafka概述

一 Zookeeper 1.1 Zookeeper定义 Zookeeper是一个开源的、分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1.2 Zookeeper特点 Zookeeper&#xff1a;一个领导者&#xff08;leader&#xff09;&#xff0c;多个跟随者&#xff08;Follower&#xff09;组成的…...

架构师 - 架构师是做什么的 - 学习总结

架构师核心定义 架构师是什么 架构师是业务和技术之间的桥梁 架构师的核心职责是消除不确定性、和降低复杂性 架构设计环 架构师的三个核心能力 架构师的三个关键思维 架构师主要职责 架构设计 Vs 方案设计 架构设计前期 主要任务 澄清不确定性 明确利益干系人的诉求消除冲…...

全链路压测方案(一)—方案调研

一、概述 在业务系统中&#xff0c;保证系统稳定至关重要&#xff0c;直接影响线上业务稳定和性能。测试工作作为保证生产质量的最后一关&#xff0c;扮演者重要的角色。全链路压测是一种重要的测试工具和手段。可以解决系统中多环节多节点无法全流程打满流量的痛点问题&a…...

c++关键字const

C中的const是一种常量修饰符。在变量、函数参数和成员函数中使用const可以限制其对数据的修改。 const修饰的数据在定义时必须进行初始化&#xff0c;且不能被修改&#xff0c;因此使用const可以提高代码的安全性和可读性。在C中&#xff0c;const修饰的成员函数表示该函数保证…...

分布式计算平台 Hadoop 简介

Hadoop简介 Hadoop是一种分析和处理大数据的软件平台&#xff0c;是一个用Java语言实现的Apache的开源软件框架&#xff0c;在大量计算机组成的集群中实现了对海量数据的分布式计算。其主要采用MapReduce分布式计算框架&#xff0c;包括根据GFS原理开发的分布式文件系统HDFS、…...

系统学习Python——警告信息的控制模块warnings:常见函数-[warnings.warn]

分类目录&#xff1a;《系统学习Python》总目录 warnings.warn(message, categoryNone, stacklevel1, sourceNone, \*, skip_file_prefixesNone)常备用于引发警告、忽略或者触发异常。 如果给出category参数&#xff0c;则必须是警告类别类 &#xff1b;默认为UserWarning。 或…...

监听键盘事件vue3封装hooks

监听页面键盘事件&#xff0c;执行对应方法 使用第三方API&#xff1a;vueuse 我封装的&#xff1a; 1. useKeyboardEvent.ts import { useMagicKeys } from vueuse/coreexport function enterKey(f: Function) {const { enter } useMagicKeys()watch(enter, v > {if (…...

Java Stream简化代码

使用原始流以获得更好的性能 使用 int、long 和 double 等基本类型时&#xff0c;请使用IntStream、LongStream 和 DoubleStream 等基本流&#xff0c;而不是 Integer、Long 和 Double 等装箱类型流。原始流可以通过避免装箱和拆箱的成本来提供更好的性能。 var array new i…...

py爬虫入门笔记(request.get的使用)

文章目录 Day11. 了解浏览器开发者工具2. Get请求http://baidu.com3. Post请求https://fanyi.baidu.com/sug4. 肯德基小作业 Day21. 正则表达式2. 使用re模块3. 爬取豆瓣电影Top250的第一页4. 爬取豆瓣电影Top250所有的250部电影信息 Day31. xpath的使用2. 认识下载照片线程池的…...

openssl3.2 - 官方demo学习 - encode - rsa_encode.c

文章目录 openssl3.2 - 官方demo学习 - encode - rsa_encode.c概述笔记END openssl3.2 - 官方demo学习 - encode - rsa_encode.c 概述 命令行参数 server_priv_key.pem client_priv_key.pem 这2个证书是前面certs目录里面做的 官方这个程序有bug, 给出2个证书, 还要从屏幕上输…...