日志记录——单片机可执行文件合并

一:需求场景

现在有一片单片机,执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产是有以下问题,由于要通过jlink烧录boot,然后上电启动boot,通过boot烧录初始化程序,过程过于复杂,流程步骤比较多,于是产生了现在这个需求再给到生产前直接将boot可执行文件与app可执行文件合并成一个固件,直接通过jlink一次性烧录完成。

二:文件格式分析(合并bin文件还是hex文件)

        1.bin文件

bin文件是一种通用的二进制文件格式,它包含了机器代码和数据,可以直接被计算机执行。它的特点是小巧、快速,并且易于在不同的计算机架构之间移植。然而,由于它没有记录符号信息,所以调试起来相对困难。

binary file中只有代码+数据,没有地址信息,所以在使用Binary file烧录/刷写时,需要指定地址,这一过程一般在烧录/刷写在上位机工具上完成。

特点:程序大小即文件大小;

           不包含地址信息,烧录需要指定起始地址。

        2.hex文件

hex文件是Intel公司提出的按地址排列的数据信息格式,用于将编译后的程序代码存储在单片机等设备中。它的每一行都以冒号开头,表示记录的开始,然后是数据地址和数据内容。Hex文件的特点是易于阅读和编辑,因为它是以ASCII码的形式表示的。同时,它也包含了符号信息,方便调试和程序移植。

hex是用于文件格式是intel规定的标准,总体来说,hex是文本文件,经常在微控制器的固件开发中看到hex的身影,例如基于GD32法50硬件,使用MDK开发的话,该软件就可以生成hex文件;如下图所示;

Hex文件是一种特定的文本文件格式,用于存储机器代码和数据,特别是用于单片机等嵌入式系统。Hex文件通常以行为单位,每行包含一串字符,以冒号(:)开头,表示记录的开始。

Hex文件的结构通常包括以下部分:

  1. 地址域(Address Field):地址域指定了数据在内存中的地址。对于某些类型的Hex文件,地址域可能不包含实际地址,而是包含相对地址或空值。
  2. 长度域(Length Field):长度域指定了记录中数据的字节数。长度域占据两位数,表示数据的长度。
  3. 类型域(Type Field):类型域指定了记录的类型。Hex文件有多种类型,例如数据记录、结束记录、扩展段地址记录等。类型域占据两位数,表示记录的类型。
  4. 数据域(Data Field):数据域包含了记录中的实际数据。数据域的长度可变,取决于记录的类型和长度域的值。数据域中的每个字节都用两个十六进制数字表示。
  5. 校验和域(Checksum Field):校验和域用于检查记录的完整性。校验和域占据一个字节,用于计算记录中所有字节的总和,取反后得到校验和值。

Hex文件的每一行都遵循上述结构,从冒号开始,然后是地址、长度、类型、数据和校验和,以回车换行符结束。这种结构使得Hex文件易于阅读、编辑和调试,同时也方便将程序代码烧写到单片机等设备中。

直接将hex文件烧入MCUFlash还是不行的,除非烧录软件可以把hex文件转成bin文件,然后再进行烧录;

三:执行程序文件格式选择

最终还是选择了bin文件格式,bin文件格式更直接,修改文件即修改flash内容。

这boot设置大小为0x4000(16k)

1.工具图标

2.使用步骤

1)运行程序选中对应boot文件

2)选择对应app应用程序

3)选择生成路径

4)电机合成按钮,出现合成100%,表示在指定路径下可执行文件生成成功。

四:工具开源下载链接

已绑定文章,文章开头下载。

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

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

相关文章

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …

消息总线在微服务中的应用

直连式配置中心 上一篇文章介绍了 Spring Cloud 中的分布式配置组件 Config,每个服务节点可以从Config Server 拉取外部配置信息。但是似乎还有一个悬而未决的问题,那就是当服务节点数量非常庞大的时候,我们不可能一台一台服务器挨个去手工触…

Linux系统编程:进程

目录 相关指令 ps指令 top指令 相关函数及其示例 getpid() getpid()示例: fork() 示例: 示例2:fork()返回值 Fathers pid is 14532.This is FartherProcess, pid is 14532.This is SonProcess, pid is 14533. vfork() 示例&am…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 上传到虚拟机中后,使用命令加载镜像即可: docker load -i mq.ta…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps:如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是,紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中,很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心,每个簇一个,并将…

webstorm、vscode、HBuilder配置eslint检查

你们好,我是金金金。 场景 每个人写的代码都有自己所属的风格,所以项目中统一代码风格特别重要,新开的项目中如何快速配置ESLint呢? 安装 npm install --save-dev eslint ----安装eslintnpm install --save-dev eslint-plugin-vu…

事件分发机制:从OnTouchListener开始,按钮变色的Demo

要彻底弄清楚事件分发机制,先要明白OnTouchListener的作用。 我们看下Android 1.6上,OnTouchListener的代码定义,源码在线地址:Android 1.6 sdk4 View.java 可以看到,OnTouchListener就是View类中的一个public接口&am…

django+flask警务案件信息管理系统python-5dg53-vue

1)用户在后台页面各种操作可及时得到反馈。 (2)该平台是提供给多个用户使用的平台,警员使用之前需要注册登录。登录验证后,警员才可进行各种操作[10]。 (3)管理员用户拥有信息新增,修…

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 4. git merge合并查看差异 前言 主要总结工作中的疑惑点,如果你也有相应的场景&am…

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 Sp…

部署实战--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive ( Java 档案文件),它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能,不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注:在虚拟环境里面,通过在一台虚拟服务器上面安装FR…

flinkjar开发 自定义函数

编写自定义加密函数,继承ScalarFunction类,实现eval方法,参数个数类型和返回值根据业务来自定义。 import org.apache.flink.table.functions.ScalarFunction; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax…

ELK集群搭建(基础教程)

ELK集群搭建(基础教程) 目录: 机器准备 集群内各台机器安装Elasticsearch 安装部署Kafka(注:每个节点都配置,注意ip不同) 安装logstash工具 安装filebeat ELK收集Nginx的json日志 ELK收集Nginx正常日志和错误日…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 编辑 二、TimePicker组件 TextClock组件通过文本将当前系统时间显示在设备上。…

华为配置使用SNMPv1与网管通信示例

配置使用SNMPv1与网管通信示例 组网图形 图1 配置使用SNMPv1与网管通信组网图 SNMP简介配置注意事项组网需求配置思路操作步骤配置文件 SNMP简介 简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。S…

AJAX-接口文档

接口文档:由后端提供的描述接口的文章 接口:使用AJAX和服务器通讯时,使用的URL,请求方法,以及参数 1.请求参数的位置为query(查询)的时候,就说明要使用params写为查询参数 2.请求参…

神经网络 | 基于多种神经网络模型的轴承故障检测

Hi,大家好,我是半亩花海。本文主要源自《第二届全国技能大赛智能制造工程技术项目比赛试题(样题) 模块 E 工业大数据与人工智能应用》,基于给出的已知轴承状态的振动信号样本,对数据进行分析,建…