python关于hex读写的笔记

参考说明:
本文张部分参考如下连接文件
https://blog.csdn.net/marst437730201/article/details/128517936

嵌入式--Hex文件总结:Hex文件格式,Hex文件转bin文件_嵌入式芯片是hex吗-CSDN博客

1.了解hex文件
作为嵌入式软件工程师,hex文件主要出自于基于keil编译生成可以下载到MCU的代码,根究参考文章介绍,通过记事本等相关软件都可以打开看到hex文件里面的内容,如下所示内容:

:020000040800F2
:1000000028150020D90000086D8D00086F8D0008AC
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000718D0008CA
:100030000000000000000000738D0008758D0008AE

识别主要是以行为主,抛开开头一行和结尾两行的不规则内容,每行主要表达的内容依次为行开始、数据长度、地址、数据类型、数据、校验和(该部分内容如果使用参考文章中使用的编译器可以很轻易的区分出来):

位置字节长度说明举例
行开始:代表代码行开始
数据长度行开始后两个数字后部分数据的长度每行航开始后的02和10
地址数据长度后的四个数字表示记录所在内存地址的字段第二行的0000
数据类型  

地址后面的两个数字

‘00’ Data Record:数据记录;

‘01’ End of File Record:文件结束记录

‘02’ Extended Segment Address Record:扩展段地址记录

‘03’ Start Segment Address Record:开始段地址记录

‘04’ Extended Linear Address Record:扩展线性地址记录

‘05’ Start Linear Address Record:开始线性地址记录

第一行的04

第二行的00(在hex文件中,除却开头一行结尾2行都是00)

校验和结尾两个数字

用于校验记录的字段,通过对其他字段进行校验计算得出。

它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

第一行结尾的F2和第二行结尾的AC

校验和的计算方法详细解释:将行开始后的所有的数据按字节相加,即成对相加起来,然后模除256得到余数,再对这个余数求补码,最终得出的结果就是校验和。所以检测方法也很简单:在每一条记录内,将RecordMark(“:”)后的所有数据(包括Checksum)按字节相加后得到的8位数据为0,则说明数据无误。

2.读hex文件

这一步比较简单,直接可以使用python常规打开文档的命令就可以

file_place = 'E:\desktop\123.hex'    # 这里注意用单引号
file_d = open(file_place,'r')        # 以读的形式打开文件
file_data = file_d.readlines()       # 以行的形式读取文件,这里非常建议这么读,一行正好一个地址
file_d.close()                       # 关闭打开的文件,单行运行可以不加,但是建议加上,养成好习惯
# 此时file_data 的每一行都与hex文件中的每一行相呼应,这种方式是最适合读取的方式

这样读出来的效果与notepad++中每一行显示的效果基本一致

3.识别hex文件

本来的目标是通过读取hex文件来识别其中的某个位置从而实现不下载hex文件到单片机里面也能读到软件版本好的变化,但是继续往下进行的时候,发现这里其实没办法直接找到变动的位置,如果你只是变动了一个数字还比较好区别,但是,代码有长有短,不同单片机的存储方式写入内容等信息都不一样,导致版本号存储的位置不是十分固定,实际上的变动并没有什么规律科研,所以,在此失败,希望嗯呢该在想到新的方式之前能解决这个问题

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

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

相关文章

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试,收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁? 行锁有哪些? 性能优化 分库分表…

drf知识-08

Django之了解DRF框架 # 介绍:DRF全称 django rest framework # 背景: 在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的 增:校验请…

数组和字符串

1、概述 数组是在内存中连续的相同类型的变量空间数组属于构造数据类型 //数组定义 //数据类型 数组名[元素个数]{值1,值2,值3,……}; int arr[10]{9,8,7,6,5,4,3,2,1,0};//元素访问 //数组名[下标] //数组下标从0开始 for(int i0;i) {prin…

【《设计模式之美》】如何取舍继承与组合

文章目录 什么情况下不推荐使用继承?组合相比继承有哪些优势?使用组合、继承的时机 本文主要想了解: 为什么组合优于继承,多用组合少用继承。如何使用组合来替代继承哪些情况适用继承、组合。有哪些设计模式使用到了继承、组合。 …

项目——————————

C/C Linux Socket网络编程 TCP 与 UDP_c 语言tcp socket cleint read-CSDN博客C/C Socket - TCP 与 UDP 网络编程_c socket udp-CSDN博客 登录—专业IT笔试面试备考平台_牛客网

打地鼠游戏来了

主要利用js鼠标点击事件和window.setInterval()回调函数来进行实现的. 源码获取方式:链接:https://pan.baidu.com/s/1eW9qvX3zFH9qlH82-I4yOA 提取码:1233

信息安全概论快速复习(期末急救)

文章目录 1、DES中的S-盒输入输出问题 (不需要记住S-盒)2、Kerberos认证系统3、简答题(三题每题8分):课后习题第一章、第三章、第四章第一章:重点关注安全模型内容,有几种,有几个分级…

在matlab中进行地理坐标和像素坐标的相互转换

clc;close all;clear; %地理坐标和像素坐标的相互转换 [pic,R]geotiffread(boston.tif); %读取带地理坐标信息的tif影像 [m,n,~]size(pic);%像素坐标转换为地理坐标 figure(1),imshow(pic),title(不带地理坐标的静态图片); hold on; scatter(n/4,m/4,500,r.); %选择1/4处像素坐…

活动回顾 (下) | 机器学习系统趋势研判,大咖金句汇总

作者:三羊、李宝珠、李玮栋、Yudi、xixi 编辑:李宝珠 在大模型时代的浪潮中,机器学习系统正经历着前所未有的变革。模型规模的急剧膨胀,让我们见证了 AI 能力的巨大提升,然而这种提升不仅为各个领域带来了新的机遇&…

音视频的编码格式与封装格式

音视频的编码格式与封装格式是两个不同的概念,视频封装格式常见的有:mp4,rmvb,avi,mkv,mov,mpg,vob,3gp,asf,rmvb,wmv,div…

关于设计模式、Java基础面试题

前言 之前为了准备面试,收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文:https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv 设计模式 单例共有几种写法? 细分起来就有9种:懒汉&#x…

lv13 内核模块动态添加新功能 6

1 动态加载法 即新功能源码与内核其它源码不一起编译,而是独立编译成内核的插件(被称为内核模块)文件.ko 1.1 新功能源码与Linux内核源码在同一目录结构下时 给新功能代码配置Kconfig(模块代码与上一级相同) 给新功能代码改写…

C++自学笔记006左值引用和右值引用

C自学笔记006左值引用和右值引用 无论左值引用还是右值引用,都是给对象取别名。 左值引用 左值引用就是对左值的引用,给左值取别名。 int& ref_data1 data1; int*& ref_ptr_data1 ptr_data1; int& ref_data2 *ptr_data2; const int&a…

基于SpringBoot的仓库管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的仓库管理系统,java项目…

八种常见顺序存储的算法

目录 1、线性枚举 1)问题描述 2)动图演示 3)示例说明 4)算法描述 5)源码详解 2、前缀和差分 1)问题描述 2)动图演示 3)样例分析 4)算法描述 5)源码…

Flink Kafka[输入/输出] Connector

本章重点介绍生产环境中最常用到的Flink kafka connector。使用Flink的同学,一定会很熟悉kafka,它是一个分布式的、分区的、多副本的、 支持高吞吐的、发布订阅消息系统。生产环境环境中也经常会跟kafka进行一些数据的交换,比如利用kafka con…

linux firewalld简介

firewalld简介 Firewalld上有一些预定义区域,可分别进行自定义,下表介绍了这些初始区域配置 firewalld将所有传入流量划分成区域,每个区域都具有自己的一套规则 任何新网络接口默认区域都将设置为public区域 区域名称默认配置trusted可信区…

类。。。。

定义一个person类&#xff0c;包含私有成员&#xff0c;int *age,string &name,一个stu类&#xff0c;包含私有成员double *sore,person p1,写出person类和stu类的特殊成员函数&#xff0c;并写一个stu的函数&#xff0c;显示所有信息。 #include <iostream>using n…

Android下载gradle失败解决方法

1、在gradle-wrapper.properties文件中查看自己需要下载gradle什么版本的包和zip路径&#xff08;wrapper/dists&#xff09;。 2、在setting中查看Gradle的保存路径&#xff0c;如下图&#xff1a;C:/Users/Administrator/.gradle&#xff0c;加上第一步的zip路径得到下载grad…

15 Sequence-Driver-Sequencer communication in UVM

我们分别讨论了sequece_item、sequence、sequencer和driver。在本节中&#xff0c;我们将讨论他们如何相互talk&#xff0c;sequencer如何给driver提供从sequence里的sequence item。在开始阅读本节之前&#xff0c;请确保您了解sequencer和driver中使用的所有方法。&#xff0…