当前位置: 首页 > news >正文

Jlink下载固件到RAM区

Jlink下载固件到RAM区

  • 准备批处理
    • 搜索exe批处理
    • 读取bin数据解析
    • 调用jlink批处理
    • 准备jlink脚本
  • 调用执行

环境:J-Flash V7.96g
平台:arm cortex-m3

准备批处理

搜索exe批处理

find_file.bat

@echo off:: 自动识别脚本名和路径
set "SCRIPT_DIR=%~dp0"
set "SCRIPT_NAME=%~nx0":: 检查是否提供了正确的参数
if "%~1"=="" (echo Usage: %SCRIPT_NAME% file_nameexit /b 1
)set FIND_EXE_NAME=%~1echo Using common paths "C:\Program Files (x86)" to search for %FIND_EXE_NAME%...
for /f "tokens=*" %%i in ('dir /a/b/s/on "C:\Program Files (x86)\*%FIND_EXE_NAME%"') do (echo result: "%%i"SET FIND_EXE_NAME_PATH=%%igoto :found
)echo Using common paths "C:\Program Files" to search for %FIND_EXE_NAME%...
for /f "tokens=*" %%i in ('dir /a/b/s/on "C:\Program Files\*%FIND_EXE_NAME%"') do (echo result:  "%%i"SET FIND_EXE_NAME_PATH=%%igoto :found
)rem 搜索其他盘
for /F "Skip=2" %%d in ('Wmic Logicaldisk Where "DriveType=3" Get Name') do (echo Using common paths %%d to search for %FIND_EXE_NAME%for /f "tokens=*" %%i in ('dir /a/b/s/on "%%d\*%FIND_EXE_NAME%"') do (echo result: "%%i"SET FIND_EXE_NAME_PATH=%%igoto :found)
):found
echo Found %FIND_EXE_NAME% at %FIND_EXE_NAME_PATH%
goto :eof

读取bin数据解析

read_bin.py

import struct
import sysdef read_u32_from_bin(file_path, offset):with open(file_path, "rb") as f:f.seek(offset)data = f.read(4)if len(data) < 4:print("文件数据不足。")return Nonereturn struct.unpack("<I", data)[0]  # "<I"表示以小端序读取无符号32位整数if __name__ == "__main__":if len(sys.argv) != 2:print("用法: python read_bin.py <文件路径>")sys.exit(1)file_path = sys.argv[1]u32_value = read_u32_from_bin(file_path, 4) # 跳过前4个字节,读取接下来的4个字节if u32_value is not None:hex_value = hex(u32_value)print(f"{hex_value}")

调用jlink批处理

autodownload.bat

@echo off
setlocal enabledelayedexpansion:: 自动识别脚本名和路径
set "SCRIPT_DIR=%~dp0"
set "SCRIPT_NAME=%~nx0":: 检查是否提供了正确的参数
if "%~1"=="" (echo Usage: %SCRIPT_NAME% path_to_bin_file load_addressexit /b 1
)if "%~2"=="" (echo Usage: %SCRIPT_NAME% path_to_bin_file load_addressexit /b 1
):: 设置一个标志,看看可选的目录
::set "JLINK_PATH=C:\Program Files\SEGGER\JLink\JLink.exe"
set "JLINK_PATH=":: 检查用户是否提供了可选的路径
if not "%~3"=="" (if exist "%~3\JLink.exe" (set "JLINK_PATH=%~3\JLink.exe")
):: 常用文件夹搜索路径
if "%JLINK_PATH%"=="" (:: 调用搜索JLink.exe的模块call find_file.bat JLink.exe:: 检查JLINK_PATH环境变量是否已设置if not defined FIND_EXE_NAME_PATH (echo ==not found==goto :found) else (SET JLINK_PATH=!FIND_EXE_NAME_PATH!goto :found)
):found
if "%JLINK_PATH%"=="" (echo JLink.exe not found. Please make sure JLink is installed and the executable is in your PATH.exit /b 1
)
echo Using JLink.exe at: %JLINK_PATH%REM 调用 Python 脚本读取二进制文件中的 u32 值
python read_bin.py %~1 > result.txtREM 获取 Python 脚本的输出
for /f "delims=" %%i in (result.txt) do (set PC_VALUE=%%i
)REM 删除临时文件
del result.txtecho PC_VALUE = !PC_VALUE!:: 复制flash_ram.jlink模板并替换占位符
set "JLINK_SCRIPT=%SCRIPT_DIR%flash_ram_temp.jlink"
copy /Y "%SCRIPT_DIR%flash_ram.jlink" "%JLINK_SCRIPT%"
powershell -Command "(Get-Content '%JLINK_SCRIPT%') -replace 'BIN_FILE_PATH', '%~1' -replace 'LOAD_ADDRESS', '%~2' -replace 'PC_VALUE', '!PC_VALUE!'| Set-Content -Path '%JLINK_SCRIPT%'":: 运行JLink命令脚本
"%JLINK_PATH%" -CommanderScript "%JLINK_SCRIPT%":: 删除临时脚本
del "%JLINK_SCRIPT%":: 运行JLink命令脚本
::"%JLINK_PATH%" -CommanderScript "%SCRIPT_DIR%flash_ram.jlink" "%~1" "%~2"::禁用延迟扩展
endlocal

准备jlink脚本

flash_ram.jlink

// 连接设置
device Cortex-M3
si 1
speed 4000// 重置并停止目标设备
r
h// 下载二进制文件到RAM,路径和地址根据实际情况替换
loadbin BIN_FILE_PATH LOAD_ADDRESS// 设置中断向量表地址(假设中断向量表地址为0x10000000)
w4 0xE000ED08, 0x10000000// 读取中断向量表的第一个条目(初始堆栈指针值)
mem32 0x10000000, 1// 读取中断向量表的第二个条目(复位)
mem32 0x10000004, 1// 设置PC寄存器为读取的第二个32位值
setPC PC_VALUE// 执行程序
g// 等待程序执行
//wait 1000// 停止设备
//halt// 读取并输出当前的PC寄存器值
//regs// 退出J-Link
q

以下设置信息都可在map文件找到
设置SP
在这里插入图片描述

在这里插入图片描述
设置中断向量表
在这里插入图片描述

在这里插入图片描述

设置PC = Reset_Handler地址
在这里插入图片描述

调用执行

# 脚本名 bin文件地址 需烧录RAM区域起始地址
.\autodownload.bat "C:\Users\gs\Desktop\xxx.bin" 0x10000000

在这里插入图片描述
在这里插入图片描述

相关文章:

Jlink下载固件到RAM区

Jlink下载固件到RAM区 准备批处理搜索exe批处理读取bin数据解析调用jlink批处理准备jlink脚本 调用执行 环境&#xff1a;J-Flash V7.96g 平台&#xff1a;arm cortex-m3 准备批处理 搜索exe批处理 find_file.bat echo off:: 自动识别脚本名和路径 set "SCRIPT_DIR%~dp…...

Kotlin基础——Typeclass

高阶类型 如在Iterable新增泛型方法时 interface Iterable<T> {fun filter(p: (T) -> Boolean): Iterable<T>fun remove(p: (T) -> Boolean): Iterable<T> filter { x -> !p(x) } }对应的List、Set实现上述方法时仍需要返回具体的类型 interfac…...

DC-DC 高压降压、非隔离AC-DC、提供强大的动力,选择优质电源芯片-(昱灿)

畅享长续航&#xff0c;尽在我们的充电芯片&#xff01; 无论是手机、平板还是智能设备&#xff0c;长时间使用后电量不足总是令人头疼。然而&#xff0c;我们的充电芯片将为您带来全新的充电体验&#xff01;采用先进的技术&#xff0c;我们的充电芯片能够提供快速而稳定的充电…...

GPT-4o的视觉识别能力,将绕过所有登陆的图形验证码

知识星球&#x1f517;除了包含技术干货&#xff1a;《Java代码审计》《Web安全》《应急响应》《护网资料库》《网安面试指南》还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 我们来看一下市面上常见的图形验证…...

【LinuxC语言】进程间的通信——管道

文章目录 前言不同进程间通信的方式管道匿名管道和命名管道半双工与全双工管道相关函数创建管道总结前言 在Linux操作系统中,进程是执行中的程序的实例。每个进程都有自己的地址空间,数据栈以及其他用于跟踪进程执行的辅助数据。操作系统管理这些进程,并通过调度算法来分享…...

CompletableFuture 基本用法

一、 CompletableFuture简介 CompletableFuture 是 Java 8 引入的一个功能强大的类&#xff0c;用于异步编程和并发处理。它提供了丰富的 API 来处理异步任务的结果&#xff0c;支持函数式编程风格&#xff0c;并允许通过链式调用组合多个异步操作。 二、CompletableFuture中…...

网页如何发布到服务器上

将网页发布到服务器上的过程涉及多个步骤&#xff0c;包括准备阶段、选择托管提供商、发布网站等。12 准备阶段&#xff1a; 确保在本地开发环境中对网站进行了充分的测试&#xff0c;包括功能测试、性能测试和安全测试。 检查Web.config文件&#xff0c;确保所有的配置设置…...

Jenkins简要说明

Jenkins 是一个开源的持续集成和持续部署&#xff08;CI/CD&#xff09;工具&#xff0c;广泛用于自动化软件开发过程中的构建、测试和部署等任务。它是基于Java开发的&#xff0c;因此可以在任何支持Java的平台上运行&#xff0c;并且能够与各种操作系统、开发工具和插件无缝集…...

C# 比较基础知识:最佳实践和技巧

以下是一些在 C# 中进行比较的技巧和窍门的概述。 1. 比较原始类型 对于原始类型&#xff08;int、double、char 等&#xff09;&#xff0c;可以使用标准比较运算符。 int a 5; int b 10; bool isEqual (a b); // false bool isGreater (a > b); // false bool is…...

Ansible 自动化运维实践

随着 IT 基础设施的复杂性不断增加&#xff0c;手动运维已无法满足现代企业对高效、可靠的 IT 运维需求。Ansible 作为一款开源的自动化运维工具&#xff0c;通过简洁易用的 YAML 语法和无代理&#xff08;agentless&#xff09;架构&#xff0c;极大简化了系统配置管理、应用部…...

红队攻防渗透技术实战流程:中间件安全:IISNGINXAPACHETOMCAT

红队攻防渗透实战 1. 中间件安全1.1 中间件-IIS-短文件&解析&蓝屏等1.2 中间件-Nginx-文件解析&命令执行等1.2.1 后缀解析 文件名解析1.2.2 cve_2021_23017 无EXP有POC1.2.3 cve_2017_7529 意义不大1.3 中间件-Apache-RCE&目录遍历&文件解析等1.3.1 cve_20…...

如何卸载宝塔面板?

宝塔官方有提供宝塔面板的卸载命令&#xff0c;使用这个卸载命令&#xff0c;我们就能将宝塔面板卸载掉。 这里有一点需要注意的&#xff0c;如果卸载宝塔面板的同时&#xff0c;也希望将 Nginx、MySQL、PHP 等组件卸载掉&#xff0c;那么我们应该先在宝塔面板里面卸载掉以上软…...

python入门基础知识(错误和异常)

本文部分内容来自菜鸟教程Python 基础教程 | 菜鸟教程 (runoob.com) 本人负责概括总结代码实现。 以此达到快速复习目的 目录 语法错误 异常 异常处理 try/except try/except...else try-finally 语句 抛出异常 用户自定义异常 内置异常类型 常见的标准异常类型 语法…...

迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗

增强AR实景抬头显示HUD&#xff08;Augmented Reality Head-Up Display&#xff09;是一种更高级的驾驶辅助技术&#xff0c;相比于普通抬头显示HUD&#xff0c;它提供了更丰富、更具沉浸感的驾驶体验。以下是它比普通抬头显示HUD多的一些功能&#xff1a; • 信息呈现方式&am…...

vivado、vitis2022安装及其注意事项(省时、省空间)

1、下载 AMD官网-资源与支持-vivado ML开发者工具&#xff0c;或者vitis平台&#xff0c; 下载的时候有个官网推荐web安装&#xff0c;亲测这个耗时非常久&#xff0c;不建议使用&#xff0c;还是直接下载89G的安装包快。 注意&#xff1a;安装vitis平台会默认安装vivado&…...

【自动驾驶】ROS小车系统

文章目录 小车组成轮式运动底盘的组成轮式运动底盘的分类轮式机器人的控制方式感知传感器ROS决策主控ROS介绍ROS的坐标系ROS的单位机器人电气连接变压模块运动底盘的电气连接ROS主控与传感器的电气连接ROS主控和STM32控制器两种控制器的功能运动底盘基本组成电池电机控制器与驱…...

mysql学习——多表查询

多表查询 内连接外连接自连接自连接查询联合查询 子查询 学习黑马MySQL课程&#xff0c;记录笔记&#xff0c;用于复习。 添加外键 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);多表查询 select * from emp , dept where emp…...

【Gradio】如何设置 Gradio 数据框的样式

简介 数据可视化是数据分析和机器学习的关键方面。Gradio DataFrame 组件是一种流行的方式&#xff0c;在网络应用程序中显示表格数据&#xff08;特别是以 pandas DataFrame 对象的形式&#xff09;。 本文将探讨 Gradio 的最新增强功能&#xff0c;这些功能允许用户整合 pand…...

【ThreeJS】Threejs +Vue3 开发基础

目前流行的前端3D框架以以Three.js、Babylon.js、A-Frame和ThingJS为例&#xff1a; 1.Three.js 功能&#xff1a; 提供了大量的3D功能&#xff0c;包括基本几何形状、材质、灯光、动画、特效等。 易用性&#xff1a; 功能强大且易于使用&#xff0c;抽象了复杂的底层细节&…...

cocos 如何使用九宫格图片,以及在微信小程序上失效。

1.在图片下方&#xff0c;点击edit。 2.拖动线条&#xff0c;使四角不被拉伸。 3.使用。 其他 在微信小程序上失效&#xff0c;需要将packable合图功能取消掉。...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...