Windows bat脚本学习九(srec_cat)

一、简介

        srec_cat是一个在嵌入式开发中,使用非常频繁的软件,这里做个常用功能的介绍。

二、常用参数

        文件类型

        在使用srec_cat指令时,在输入文件和输出文件时,要指明文件的类型,如:

input.hex -intel    ::因特尔的十六进制文件
output.bin -binary    ::二进制文件

        -o 文件名 文件类型(输出)

        见如下代码:

srec_cat 输入文件 文件类型 -o 输出文件 文件类型

        实例:合并两个hex文件

        在平时开发中,使用频率很高的一个功能就是合并两个hex,即bootapp。那这里准备3个文件boot.hex、app.hex、boot_app.hex。boot_app.hex是提前通过jflash合并的

        执行下面的代码:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: 合并两个hex文件
srec_cat boot_jf.hex -intel app_jf.hex -intel -o merge.hex -intelecho 转化结束	pause	endlocal	

        得到merge.hex文件,我们对比merge.hex和boot_app.hex文件。

        可以看到,除了第一行,其他全都一样。第一行是因为jflash转化的机制问题,不用管

        -offset 地址(设置偏移地址)

        在对二进制文件操作的时候,经常会用到这个参数

srec_cat 输入文件 文件类型 -offset 偏移地址 -o 输出文件 文件类型

        实例:bin文件转hex文件

        之前介绍过hex转bin文件的方法,这里再介绍一下把bin转hex的方法。hex2bin不会的可以看这篇文章:hex文件转bin文件-CSDN博客

         这里,准备2个文件,boot.hex和boot.bin。boot.bin是通过jflash转化来的。

        执行如下代码:

@echo off
chcp 65001
setlocal enabledelayedexpansionsrec_cat boot_jf.bin -binary -offset 0x000 -o boot_srec.hex -intelecho 转化结束	pause	endlocal

        对比boot_srec.hex和boot.hex文件。

        发现有好多不一样,为什么会这样?

        直接看一下hex的内容。

        原来是因为源文件每行是16个字节,srec转化出来的显示32个字节

        实例:hex文件转bin文件

        scre_cat同样也是可以把hex转换为bin文件的。

@echo off
chcp 65001
setlocal enabledelayedexpansion:: hex转Bin
srec_cat boot_jf.hex -intel -o boot_srec.bin -binaryecho 转化结束	pause	endlocal	

        对比boot_srec.bin和boot_jf.bin

 

        只是空白区域填充不一样而已

        -Output_Block_Size=长度(限制输出文件每行记录的字节长度)

srec_cat 输入文件 文件类型 -offset 偏移地址 -o 输出文件 文件类型 -Output_Block_Size=限制长度

        实例:bin文件转hex文件。

        还是准备boot.bin和boot.hex两个文件。

        调用如下指令:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: bin转hex,限制每行记录16个字节
srec_cat boot_jf.bin -binary -offset 0x000 -o boot_srec.hex -intel -Output_Block_Size=16echo 转化结束	pause	endlocal	

         再对比boot_srec.hex和boot,hex文件。

        这次前面已经完全一样了,但是后面还是不一样。

        直接打开内容。

        可以看到,boot.hex文件,从0x193c-0x1e40中间是没有任何数据的。而boot_srec.hex是将这些空白内容全部填充为0xff。

        实例:起始地址非零的bin文件转hex文件。

        很多时候,bin文件的起始地址非零,比如app.bin。此时如果要把其转化为hex,就必需要设置偏移地址,否则转出来的hex将是错误的。

        这里准备2个文件,app.bin和app,hex。app.bin是通过jflash转出来的。

        执行如下代码:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: bin转hex,限制每行记录16个字节
srec_cat app_jf.bin -binary -offset 0x000 -o app_srec.hex -intel -Output_Block_Size=16echo 转化结束	pause	endlocal	

        对比app_srec.hex和app.hex。

        很多地方不一样。直接看hex内容。

        可以看到,app_srec.hex的偏移地址是0,而app.hex的偏移地址为0x2000

        修改代码:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: bin转hex,偏移地址为0x2000,限制每行记录16个字节
srec_cat app_jf.bin -binary -offset 0x2000 -o app_srec.hex -intel -Output_Block_Size=16echo 转化结束	pause	endlocal	

        再次对比两个文件。

        一样了。

        -fill 填充数据 填充起始地址 填充结束地址

        在合并Bin文件的时候,会用到该参数

srec_cat 输入文件 文件类型 -fill 填充内容 填充起始地址 填充结束地址 输入文件 文件类型 -o 输出文件 文件类型

        实例:合并两个bin文件,并填充内容。

        准备三个文件,boot.bin、app.bin、boot_app.bin。boot_app.bin是通过jflash转化来的。

        执行如下代码:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: 合并两个bin文件,不填充
srec_cat boot_jf.bin -binary app_jf.bin -binary -offset 0x2000 -o merge.bin -binaryecho 转化结束	pause	endlocal	

        对比merge.bin和boot_app.bin

        可以看到,这里有一段不一样。merge.bin的数字是0,而boot_app.bin是0xff。

        看一下boot.bin文件

        数据到0x1e43就已经结束了,所以0x1e43-0x2000是无数据的。srec_cat就默认填充了0.

        使用-fill参数,将空白内容填充为0xff。运行如下代码:

@echo off
chcp 65001
setlocal enabledelayedexpansion:: 合并两个bin文件,填充0xff
srec_cat boot_jf.bin -binary -fill 0xff 0x00000000 0x00002000 app_jf.bin -binary -offset 0x2000 -o merge.bin -binaryecho 转化结束	pause	endlocal	

        再对比merge.bin和boot_app.bin。

        完全一样了。

        -CRC16_Little_Endian 地址(计算文件CRC16并以小端输出)

        在进行OTA的时候,需要提供一个校验值来保证数据传输完成后的正确性。此时CRC就是一个很常用的方式。

srec_cat 输出文件 文件类型 -CRC16_Little_Endian 地址 -o boot_crc.bin -binary

        实例:计算bin文件的CRC,并记录

@echo off
chcp 65001
setlocal enabledelayedexpansion:: 计算crc
srec_cat boot_jf.bin -binary -CRC16_Little_Endian 0x00001e50 -o boot_crc.bin -binaryecho 转化结束	pause	endlocal	

        查看boot_crc.bin文件。

        在0x1e50的位置,已经有了计算的CRC。

        注:如果要计算CRC32,可以把参数修改为 -CRC16_Little_Endian

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

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

相关文章

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究(完整论文,持续更新,大家持续关注,更新见文末名片 ) 摘要 在本文中,建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛…

网络层 VII(IP多播、移动IP)【★★★★★★】

一、IP 多播 1. 多播的概念 多播是让源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,即一对多的通信。在互联网上进行的多播,称为 IP 多播(multicast , 以前曾译为组播)。 与单播相比,在一对多的…

Linux_kernel移植uboot07

一、移植 根据硬件平台的差异,将代码进行少量的修改,修改过后的代码在目标平台上运行起来 移植还需要考虑硬件环境,驱动只需要考虑内核的环境 二、移植内容 1、移植Uboot uboot属于bootloader的一种,还有其他的bootloader&#x…

【超简单】1分钟解决ppt全文字体一键设置

省流 ppt的全部字体需要在“幻灯片母版”里面,“自定义字体”去设置好标题与正文的字体之后才算全部设置完毕 “视图”---“幻灯片母版” 找到“字体”---“自定义字体” 设置好中文和西文的字体,都可以按照自己的选择来,保存即可 吐槽 之…

通信工程学习:什么是FEC前向纠错

FEC:前向纠错 FEC(Forward Error Correction,前向纠错)是一种增加数据通信可信度的技术,广泛应用于计算机网络、无线通信、卫星通信等多种数据传输场景中。其基本原理和特点可以归纳如下: 一、FEC前向纠错…

固态硬盘装系统有必要分区吗?

前言 现在的新电脑有哪一台是不使用固态硬盘的呢?这个好像很少很少了…… 有个朋友买了一台新的笔记本电脑,开机之后,电脑只有一个分区(系统C盘500GB)。这时候她想要给笔记本分区…… 这个真的有必要分区吗&#xf…

golang关于slice map函数传参的小问题

问题 函数传参了一个slice,在函数内触发了对长度的修改(添加或删除),但是未影响函数外的实参由此产生了另一个问题,我们用map在函数内修改会不会有影响不到实参的情况? 结论 map作为函数参数时是引用传递…

TCP 拥塞控制

概念详解 TCP拥塞控制是网络通信中的一个关键机制,它通过动态调整发送数据的速率来避免网络拥塞。以下是TCP拥塞控制的详细概念解释: 拥塞窗口(CWND, Congestion Window): 定义:发送方在收到接收方的确认(…

Java 面试题:通过JProfile排查OOM问题 内存溢出与内存泄漏问题 --xunznux

文章目录 如何通过JProfile排查OOM或内存泄漏问题1、启动工具观测程序执行状态2、使用默认设置采样3、查看memory,Run GC无效4、查看 Live Memory发现两个byte大数组存在5、通过快照查看堆中的内存使用情况6、找到Full GC无法清除的对象通过大对象列表定位内存泄漏问…

【SpringBoot】电脑商城-12-订单功能

创建订单 1 订单-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_order和t_order_item数据表。 CREATE TABLE t_order (oid INT AUTO_INCREMENT COMMENT 订单id,uid INT NOT NULL COMMENT 用户id,recv_name VARCHAR(20) NOT NULL COMMENT …

Mac 上 YYDS 的自动切换输入法工具:好用到原地炸裂式起飞

有一种幸福的状态就是 任何时刻你都可以全力以赴 被打断、被终止也没有遗憾 因为你对结果没有那么期待 而且已经用尽全力了 当你深刻认识到你所做的事情 是多么好的时候 自然会产生一种想要分享出去 的心情 如今社会大部分工作都被电脑化了,在很多方面我们的…

第140天:内网安全-横向移动局域网ARP欺骗DNS劫持钓鱼中间人单双向

目录 案例一:局域网&工作组-ARP原理-断网限制-单向 案例二:局域网&工作组-ARP欺骗-劫持数据-双向 案例三:局域网&工作组-DNS 劫持-钓鱼渗透-双向 案例一:局域网&工作组-ARP原理-断网限制-单向 原理&#xff1…

数据库MySQL基础

目录 一、数据库的介绍 1.数据库概述 (1)数据的存储方式 (2)数据库 2.常见数据库排行榜 二、数据库的安装与卸载 1.数据库的安装 2.数据库的卸载 三、数据库服务的启动与登录 1.Windows 服务方式启动 (1&…

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码&…

相机常见名词详解

本文主要参考超人视觉课程做的笔记,有讲解不太懂的,又做了详细的解释 1、物距:物体到镜片的距离; 2、像距:像到镜片的距离; 3、焦距:镜片到焦点的距离; (1)二倍焦距以外&#xff…

AF路由模式组网部署

实验拓扑 防火墙基本配置 接口配置 eth1 eth2 eth3 路由配置 地址转换配置 放通策略 1. 出口申请了主电信、备联通两条外网线路(均为 50M 带宽)。 2. 内网有 web 服务器linux 172.16.3.100运行 http 服务,内外网用户通过 出口路由器…

用PG Back Web轻松进行PostgreSQL备份

什么是 PG Back Web ? PG Back Web 🐘 使用用户友好的 Web 界面轻松进行 PostgreSQL 备份!🌐💾。PG Back Web 不仅仅是另一个备份工具。借助 PG Back Web,用户可以通过受 PGP 加密保护的直观 Web 界面轻松安…

【redis】数据量庞大时的应对策略

文章目录 为什么数据量多了主机会崩分布式系统应用数据分离架构应用服务集群架构负载均衡器数据库读写分离 引入缓存冷热分离架构 分库分表微服务是什么代价优势 为什么数据量多了主机会崩 一台主机的硬件资源是有上限的,包括但不限于一下几种: CPU内存…

【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响

注:使用postgresql数据库会用到PostGIS 扩展。 一、安装PostGIS 扩展 在 PostgreSQL 中遇到错误 “type geography does not exist” 通常意味着你的 PostgreSQL 数据库还没有安装 PostGIS 扩展,或者 PostGIS 扩展没有被正确地安装在你的数据库中。geo…

我司使用了两年的高效日志打印工具,非常牛逼!

为了更方便地排查问题,电商交易系统的日志中需要记录用户id和订单id等字段。然而,每次打印日志都需要手动设置用户id,这一过程非常繁琐,需要想个办法优化下。 log.warn("user:{}, orderId:{} 订单提单成功",userId, or…