传媒网站制作,网站建设维护的方案,如何制作h5,建行网站济南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… 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: %%iSET 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: %%iSET FIND_EXE_NAME_PATH%%igoto :found
)rem 搜索其他盘
for /F Skip2 %%d in (Wmic Logicaldisk Where DriveType3 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: %%iSET 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_PATHC:\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 foundgoto :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