当前位置: 首页 > 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合图功能取消掉。...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...