PIC单片机HEX文件格式分析

  在调试PIC单片机在bootloader程序时,需要将hex文件转换为bin文件,在转换之前先了解一下hex文件中数据是如何定义的。
直接打开一个LED灯闪烁的程序生成的hex文件,芯片型号为PIC18F46K80
在这里插入图片描述
可以看到每条数据都是由6部分组成的,下面分别解释这6部分的含义。
第1部分,紫色数据,也就是冒号:,这是数据的起始标志。
第2部分,棕黄色数据,1个字节,表示数据字节数,也就是后面黑色数据的字节个数。相当于要写入flash地址中的数据。
第3部分,蓝色数据,2个字节,表示数据的地址,地址范围就是从0x0000到0xFFFF,地址范围最大为64K。
第4部分,棕红色数据,1个字节,表示数据类型。
  值有3中情况00,01,04。
  00 表示后面的数据是需要给flash中写入的数据。如上图中第1行到第10行。
  01 表示文件结束,如上图中13行所示。
  04 表示后面的地址为扩展地址,因为数据地址只有2个字节,最大值只能表示到0xFFFF,如果地址超过0xFFFF,就需要用到扩展地址,表示将后面的地址值左移16位,如图中11行所示,后面的地址为0x0030,前面的数据为04,地址值就要左移16位,所以实际的地址值就是0x0300 0000。这个地址值刚好是配置位的地址值。所以上面第12行的数据其实就是写配置位。
在这里插入图片描述
第5部分,黑色数据,字节长度最大为16,表示要给flash中真正写入的数据。
第6部分,绿色数据,1个字节,表示从冒号后面到校验位前面所有数据的校验值。校验值的计算方法为,从冒号后面开始,所有的数据累加和再加上校验值,结果必须为256的整倍数。也就是说冒号后面所有的数据,去掉进位累加,结果要为0.比如全面所有的数据累加和为0xFE,那么校验值就必须为0x02,这样加起来的结果为0x100,最后两位值为0.

  所以上面的hex文件表示的含义就是:
第1行写6个数据,写入的地址为0x2000,写入的数据值为 BA EF 7F F0 00 00 校验值为C2.
第2行写16个数据,写入的地址是0xFF74,写入的数据值为 00 01 BD EF 7F F0 0F 01 5C 6B 93 92 93 98 93 9A ,校验值为0D.
第3行到第10行都是这种方式写入数据。
第11行是将写入地址跳转到0x0300 0000处。
第12行是,再新跳转的地址处,也就是0x0300 0000处写入14个数据,其实就是代码中的配置字。
在这里插入图片描述
第12行代码文件结束。

一般情况下跳转到配置字地址的这行数据,都是固定的。比如这款单片机跳转到配置字的数据 每个hex文件 都是 ”020000040030CA“。

再打开一个EEPROM工程生成hex文件
在这里插入图片描述
可以看出第14行代码也是跳转到配置字的地址0x0030 0000 地址处。
那么第12行跳转到0x0020 0000 地址处是写什么数据的?可以直接再芯片手册中查找这个地址。
在这里插入图片描述
可以看到这个地址是用户ID的存储地址。第16行是跳转到地址0x00F0 0000地址处,这个地址在芯片手册上未找到相关资料,不过根据17行的数据可以看出,在这个地址上写入的值是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
在这里插入图片描述
此代码中在编译的时候直接给EEPROM中0–15地址中写入了数据0到15。

通过对hex文件有了深入了解之后,在编写调试bootloader代码时,就更容易了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程(三)里面的相关配置,不然你可…

【GitHub】登录时的2FA验证

一、如何进行2FA认证 1.在你的浏览器中下载 Authenticator身份验证插件 2.使用身份验证器添加凭证 2.1 使用身份验证器扫描验证二维码 选择扫描二维码

目标跟踪算法发展简史

单目标跟踪(Single Object Tracking,SOT)是计算机视觉领域中的一个重要研究方向,旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展,单目标跟踪算法经历了从经典方法到深度学习的演…

【Java设计模式-7】责任链模式:我是流水线的一员

一、责任链(Chain of Responsibility Patten)模式是个啥? 想象一下,你要请假。你先把请假申请交给了小组长,小组长一看,这事儿他能决定,就直接批了。要是小组长觉得这事儿得往上汇报&#xff0…

QT调用OpenSceneGraph

OSG和osgQt编译教程,实测通过 一、下载OpenSceneGraph OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph 二、使用CMAKE编译OpenSceneGraph 1.打开cmake,配置源代码目录 2. CMAKE_INSTALL_PREFIX设置为install文件夹,生…

数据结构与算法面试专题——引入及归并排序

数据结构与算法引入 我们都知道数据结构与算法很重要,甚至会将其称为程序员的“内功”,但是我们花了很多时间学的算法和数据结构,好像就只是为了应对算法面试,对日常的开发工作没有什么帮助。 这点对于我们数据工程师来说&#…

《鸿蒙 HarmonyOS 应用开发从入门到精通(第 2 版)》学习笔记 ——HarmonyOS 环境搭建之安装DevEco Studio

作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: 高效智能代码编辑:支持Java、XML、ArkTS、JS、C/C等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、…

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一,它为用户提供了丰富的编辑功能来美化和保护文档。其中,“水印”是一种特别有用的功能,它可以用于标识文档状态(如“草稿”或“机密”)、公司标志或是版权信息等。本…

学习记录之原型,原型链

构造函数创建对象 Person和普通函数没有区别,之所以是构造函数在于它是通过new关键字调用的,p就是通过构造函数Person创建的实列对象 function Person(age, name) {this.age age;this.name name;}let p new Person(18, 张三);prototype prototype n…

logback日志自定义占位符

前言 在大型系统运维中,很大程度上是需要依赖日志的。在java大型web工程中,一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用,比如线程号【%t】、时间【%d】、日志等级【%p】,…

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中&#xff0c…

数据恢复常用方法(三)如何辨别固态硬盘故障类型

数据恢复首先需要辨别固态硬盘故障类型,只有先确认故障类型,才能进行下一步动作 如下是一种常见的场景,固态硬盘无法识别,接入电源与数据线,电脑的磁盘管理不显示任何信息。 第一步:确认硬件状态&#xff…

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注: 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务:强化学习的目标是让智能体(agent)在一个环境(environment)中采取一系列行动(actions)以完成一个…

StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级

自 StarRocks 3.0 起,社区明确了以 Lakehouse 为核心的发展方向。Lakehouse 的价值在于融合数据湖与数据仓库的优势,能有效应对大数据量增长带来的存储成本压力,做到 single source of truth 的同时继续拥有极速的查询性能,同时也…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库(Monorepo)搭建指南:从零开始 单体仓库(Monorepo)是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置,并简化依赖管理。本文将通过实际代码示例&#xff0…

基于python的博客系统设计与实现

摘要:目前,对于信息的获取是十分的重要,我们要做到的不是裹足不前,而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能,博主在发表文章后,互联网上的其他用户便可以看到,…

Spring Boot AOP实现动态数据脱敏

依赖&配置 <!-- Spring Boot AOP起步依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>/*** Author: 说淑人* Date: 2025/1/18 23:03* Desc…

SparkSQL函数综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建项目2.2 添加依赖2.3 设置源目录2.4 创建日志属性文件2.5 创建hive配置文件2.6 创建数据分析对象2.6.1 导入相关类2.6.2 创建获取Spark会话方法2.6.3 创建表方法2.6.4 准备数据文件2.6.5 创建加载数据方法2.6.6 创建薪水排行榜方法2.6.…

ElasticSearch DSL查询之排序和分页

一、排序功能 1. 默认排序 在 Elasticsearch 中&#xff0c;默认情况下&#xff0c;查询结果是根据 相关度 评分&#xff08;score&#xff09;进行排序的。我们之前已经了解过&#xff0c;相关度评分是通过 Elasticsearch 根据查询条件与文档内容的匹配程度自动计算得出的。…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…