前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >hex文件详解及常用合并方法介绍

hex文件详解及常用合并方法介绍

作者头像
用户8913398
发布于 2022-04-14 01:05:27
发布于 2022-04-14 01:05:27
6.3K0
举报

前言

在很多复杂的系统中,或者多人参与设计的系统中,程序分区必不可免,拿最简单的IAP升级来说,包含两个程序区,BOOT区和APP区,BOOT区的主要职责是引导代码进去APP区执行目标功能,但是在下载的时候,往往提供一个hex文件即可,提供两个分别下载当然也可行,但是生产过程中增加一个工序就是一个工序的价格,再说了,完全没必要,这就涉及到了本章介绍的hex文件合并(BIN文件当然OK的)

什么是hex文件

hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

Hex文件格式:

先来看一下hex文件,主要截取了三部分,开头1行

中间数据,这里只截取了一部分作为表示

结尾2行

数据少不了数据格式(协议),先来看一看hex文件的数据格式,以第一行数据(020000040002f8)为例,看一看hex文件的每一字段数据是什么意思:

020000040002f8可以分解为:

0x02 0x00 0x00 0x04 0x02 0x02 0xf8,前面4个字节和最后一个字节是有特殊含义的,中间为数据,每个字段的具体含义如下:

  • 第一字节0x02:数据长度,即该行有多少个数据;
  • 第二、三字节0x00、0x00:表示本行数据的起始地址位;
  • 第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义:

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

'01’文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02’扩展段地址记录:用来标识扩展段地址的记录

'03’开始段地址记录:开始段地址记录

'04’扩展线性地址记录:用来标识扩展线性地址的记录

'05’开始线性地址记录:开始线性地址记录

最后一个字节0xf8为校验和:校验和= 0x100 - 累加和

单纯看上面的介绍,好像也看不出和MCU的FLASH地址如何联系起来,接下来看看是如何跟FLASH地址对应的

第一字节表示该行的数据字节数;如第1行只有 0x08 0x00 两个字节的数据,类型是 04 ,即该行记录的是一个拓展地址(0x08 0x00 是地址信息,用法是将该地址(0x0800<<16) 后作为基地址。并且表示在下一个04类型行出现之前都要使用该地址。

例如第2行的地址信息是 0x0000,则表示该行数据从0x08000000( (0x0800<<16) | 0x0000 )开始记录。

第3行则从 0x08000010 ( (0x0800<<16) | 0x0010 )开始记录。

另外最后一个字节的校验和 0xD2 = 0xff & ( 0x100- (0x10+4*(0x00)+0x38+0x05+…+0x00+0x08) ) = 0xff & (0x100-0x2E);

然后再看结尾部分:类型是05,有4字节数据,从上面的介绍可以知道,05是指“开始线性地址记录”,什么意思呢?

其实就是函数入口地址,从编译产生的.map文件中,可以看到Image Entry point后面跟的就是这个值

例如第2行的地址信息是 0x0000,则表示该行数据从0x08000000( (0x0800<<16) | 0x0000 )开始记录。

第3行则从 0x08000010 ( (0x0800<<16) | 0x0010 )开始记录。

另外最后一个字节的校验和 0xD2 = 0xff & ( 0x100- (0x10+4*(0x00)+0x38+0x05+…+0x00+0x08) ) = 0xff & (0x100-0x2E);

然后再看结尾部分:类型是05,有4字节数据,从上面的介绍可以知道,05是指“开始线性地址记录”,什么意思呢?

其实就是函数入口地址,从编译产生的.map文件中,可以看到Image Entry point后面跟的就是这个值

最后的一行,01代表文件结束,以上就是关于hex文件的简单介绍。

合并hex文件的几种方法

1、传统而不优雅的直接合并法

打开我们的hex文件,就以BOOT和APP代码为例,用记事本或者其他的软件(notepad++等)打开

从上面的介绍我们可以知道,hex文件最后一行是代表文件的结束,那么我们只需要删除boot文件的最后一行代码,然后把APP的代码直接拷贝过来

这样我们就得到了最终的hex文件,直接烧录进去MCU即可

2、jflash烧录

jlink说我们必不可少的烧录调试工具之一,一起来看看怎么使用jlink自带的jflash工具合并

打开jflash,首先选择我们的第一个文件,file->open data file即可

打开之后,可以看到地址是从8000000开始的,也即是我们的MCU flash的基地址

然后再点击file->merge data file

选择我们的第二个文件,选择打开之后,第二个hex文件就拼接到了BOOT文件之后了,保存文件即可,建议另存为我们需要的文件名,否则的话,会默认为我们打开的第一个文件名

3、开源小工具

这个方法和上面jflash的方法类似,网上有很多热心网友开发的小工具,也可以自己做一个,小飞哥就找一个自己测试过得给大伙用吧

软件源码开源,非本人所编写,github地址为:https://github.com/SmartElec/STM32-IAP-HEX-Merge,源码为C#所编写。

下载下来有源码,感兴趣的就看看,不感兴趣的就直接用即可,在realese文件夹内

直接选择我们的hex文件,注意顺序

还可以同时生成bin文件,点击合并即可

文件夹内已经生成了目标hex合并文件

接下来就可以把所有文件合并之后,只烧录一个hex文件啦

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小飞哥玩嵌入式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python | 爬虫爬取智联招聘(进阶版)
运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器
用户1634449
2018/10/18
3.2K0
Nebula Graph 在微众银行数据治理业务的实践
自我介绍下,我是微众银行大数据平台的工程师:周可,今天给大家分享一下 Nebula Graph 在微众银行 WeDataSphere 的实践情况。
NebulaGraph
2020/12/22
1.7K0
Nebula Graph 在微众银行数据治理业务的实践
Python | 爬虫抓取智联招聘(基础版)
运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器
用户1634449
2018/10/18
1.3K0
图数据库 Nebula Graph 在 HBaseCon Asia2019 的分享实录
HBaseCon Asia2019 活动于 2019 年 7 月 20 日于北京金隅喜来登酒店举办,应主办方邀请,Nebula Graph 技术总监-陈恒在活动中发表演讲 “Nebula: A Graph DB based on HBase” 。本篇文章是根据此次演讲所整理出的技术干货,全文阅读需要 30 分钟。[image.png]
NebulaGraph
2019/07/26
1.2K0
爬虫爬取智联招聘的职位信息(基础)
简单爬取智联招聘的内容,爬之前在网上找关于这方面的代码,最后发现都不行,智联现在的招聘信息都是js加载,直接请求响应不到响应的内容,只能使用selenium,通过selenium加载,网页加载完成后返回page_source。
andrew_a
2019/07/30
8270
爬虫爬取智联招聘的职位信息(基础)
爬虫0601:scrapy实战scrapy实战:智联招聘数据采集
采集的数据要被封装起来进行使用,找到并修改zhilianspider/zhilianspider/items.py,修改内容如下:
大牧莫邪
2018/08/27
6690
Nebula Graph 在众安金融的图实践
> 本文首发于 **[Nebula Graph Community 公众号](https://nebula-website-cn.oss-cn-hangzhou.aliyuncs.com/nebula-blog/WeChatOffical.png)**
NebulaGraph
2022/03/30
5820
抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图
**抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图**
andrew_a
2019/07/30
9290
抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图
Nebula Graph|信息图谱在携程酒店的应用
对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配”,是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题…本文着重讲述他们是如何构建场景与信息关系,用 Nebula 处理关联关系,从而快速返回场景化定制推荐信息给酒店用户的实践过程。
NebulaGraph
2022/05/12
5350
Nebula Graph|信息图谱在携程酒店的应用
Nebula Graph 系列(1) —— 初识 Nebula
Nebula Graph 是一个高性能、可线性扩展、开源的分布式图数据库。Nebula Graph 采用 shared-nothing 分布式架构,企业可针对性对业务进行扩缩容。
求和小熊猫
2022/05/07
1.8K0
Nebula Graph 系列(1) —— 初识 Nebula
人才招聘系统开发全解析:从技术底层到商业逻辑的完整架构优雅草卓伊凡|小无|果果|阿才
一个完整的人才招聘系统远比表面看起来复杂,优雅草科技的”蜻蜓HR”系统经过一年半的开发迭代,才完成第一阶段的核心功能。以下是必须实现的基础模块:
卓伊凡
2025/06/04
1000
推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF_TDM_Airbnb Embedding_Item2vec等)、召回路
召回这里稍微有些复杂,因为召回是多路的。首先我们要解释主路和旁路的差别,主路的意义和粗排类似,可以看作是一个入口更大,但模型更加简单的粗排。主路的意义是为粗排分担压力。但是旁路却不是这样的,旁路出现的时机往往是当主路存在某种机制上的问题,而单靠现在的这个模型很难解决的时候。举个例子,主路召回学的不错,但是它可能由于某种原因,特别讨厌影视剧片段这一类内容,导致了这类视频无法上升到粗排上。那这样的话整个系统推不出影视剧片段就是一个问题。从多路召回的角度来讲,我们可能需要单加一路专门召回影视剧的,并且规定:主路召回只能出3000个,这一路新加的固定出500个,两边合并起来进入到粗排中去。这个栗子,是出现旁路的一个动机。
汀丶人工智能
2023/02/22
3.6K0
京东电商推荐系统实践
说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子。协同过滤主要分为俩种:user-based 基于用户的协同过滤和 item-based 基于商品的协调过滤。
石晓文
2019/08/13
2.7K0
京东电商推荐系统实践
Geospatial Data 在 Nebula Graph 中的实践
本文主要介绍了地理空间数据(Geospatial Data)以及它在 Nebula Graph 中的具体实践。
NebulaGraph
2022/02/22
8590
Geospatial Data 在 Nebula Graph 中的实践
全方位讲解 Nebula Graph 索引原理和使用
index not found?找不到索引?为什么我要创建 Nebula Graph 索引?什么时候要用到 Nebula Graph 原生索引?针对社区常见问题,本文旨在一文带大家搞清索引使用问题。
NebulaGraph
2022/03/31
1.2K0
全方位讲解 Nebula Graph 索引原理和使用
基于 Nebula Graph 构建百亿关系知识图谱实践
微澜是一款用于查询技术、行业、企业、科研机构、学科及其关系的知识图谱应用,其中包含着百亿级的关系和数十亿级的实体,为了使这套业务能够完美运行起来,经过调研,我们使用 Nebula Graph 作为承载我们知识图谱业务的主要数据库,随着 Nebula Graph 的产品迭代,我们最终选择使用 v2.5.1 版本的 Nebula Graph 作为最终版本。
NebulaGraph
2022/06/27
7390
基于 Nebula Graph 构建百亿关系知识图谱实践
推荐系统经典算法之协同过滤
在开始讲推荐算法之前,我们先简单了解一下推荐系统的架构,对算法在推荐系统中的定位有一个初步的认知;一个完整的推荐系统会包含特征工程、召回、过滤、兜底、重排、abTest三部分,其中召回和排序模块会用到算法模型。
小晨说数据
2022/03/09
1.4K0
推荐系统经典算法之协同过滤
图数据库综述与 Nebula 在图数据库设计的实践
第三期 nMeetup( nMeetup 全称:Nebula Graph Meetup,为由开源的分布式图数据库 Nebula Graph 发起的面向图数据库爱好者的线下沙龙) 活动于 2019 年 8 月 3 日在上海陆家嘴的汇丰银行大楼举办,我司 CEO -- Sherman 在活动中发表《 Nebula Graph Internals 》主题演讲 。本篇文章是根据此次演讲所整理出的技术干货,全文阅读需要 30 分钟,我们一起打开图数据库的知识大门吧~
NebulaGraph
2019/08/12
2.8K0
学姐问我推荐系统是怎么做的?我用23张图带她搞懂!
做广告业务1年多时间了,但是平时的工作主要和广告工程有关,核心的广告算法由 AI 部门支持,对我们而言可以说是「黑盒般」的存在,只需要对训练好的模型进行调用即可。
Guide哥
2020/09/27
8400
学姐问我推荐系统是怎么做的?我用23张图带她搞懂!
基于协同过滤的推荐系统
原公式中,只考虑用户消费用一种商品,而没有考虑用户消费同一种商品处在不同时期。如果用户消费了物品i和物品j,如果消费时间间隔越近,那么这次“同现”的权重应该越大,间隔越远权重越小。在分子上除以间隔时间,惩罚时间间隔影响。
birdskyws
2018/11/22
1.9K0
推荐阅读
相关推荐
Python | 爬虫爬取智联招聘(进阶版)
更多 >
目录
  • 前言
  • 什么是hex文件
  • 合并hex文件的几种方法
    • 1、传统而不优雅的直接合并法
    • 2、jflash烧录
    • 3、开源小工具
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档