概要
本文档通过QT,调用jlink.exe 实现对Flash的自定义操作吗,例如对某个特定位置的读写修改或者其他操作。
程序主要是通过QT调用jlink.exe,依据jlink command的相关命令完成。
技术细节
` QT 主要通过调用外部的可执行程序,相关函数为
QProcess process;
QString programPath;
QStringList arguments;
process.start(programPath, arguments);
其中,programPath是可执行程序的位置。arguments是调用时的参数。
以cmd.exe 为例,arguments可以为直接运行的命令,例如:ipconfig,会打印出对应的数据。但是,jlink存在例外的情况,当我们直接输入命令,例如:jlink.exe中的connect命令,到arguments时,会出现以下的错误提示:
Unknown command line option connect
所以,不能直接将arguments设置为直接的命令,后面,发现需要通过脚本的方式进行命令下发,即如下的形式:
arguments << “-CommanderScript” << “script.txt”;通过这样的方式,就可以正常调用和下发命令。
script.txt的内容需要参考jlink command的相关命令,去了解相关命令的含义和左右。作者采用的相关命令如下
si 1
speed 4000
device -AT32F403AVGT7
r
h
erase
loadbin xxx.bin 0x8000000
q
烧录过程
后续的功能需求,通过修改script.txt中的内容即可完成。
主要代码如下:
执行jlink.exe调用
programPath=ui->lineEdit->text();
// 设置要执行的外部程序的路径和参数
QString script=ui->lineEdit_6->text();
arguments << "-CommanderScript" << script;
// 启动外部程序
process.start(programPath, arguments)