link-scope3/openocd.cpp

48 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "openocd.h"
OpenOCD::OpenOCD(QObject *parent) : QObject(parent)
{
process=new QProcess();
connect(process,&QProcess::readyReadStandardError,[=]{
QString error=process->readAllStandardError();
if(error.contains("Error:"))//错误信息中含有Error项则发送信号
{
emit onErrorOccur(error);
}
});
}
OpenOCD::~OpenOCD()
{
delete process;
}
//启动OCD进程并设定调试器类型、芯片类型、gdb端口号
void OpenOCD::start(const QString &chosenInterface,const QString &chosenTarget,int gdbPort)
{
process->setWorkingDirectory(QCoreApplication::applicationDirPath()+"/openocd/bin");//设置工作路径
process->setProgram(QCoreApplication::applicationDirPath()+"/openocd/bin/openocd.exe");//设置程序路径
process->setNativeArguments(
QString("-f interface/%1 -f target/%2 -c \"gdb_port %3\"")
.arg(chosenInterface).arg(chosenTarget).arg(gdbPort));//设置参数为所选的调试器、目标芯片和gdb端口
process->start();
}
//结束OCD进程
void OpenOCD::stop()
{
if(process->state()==QProcess::NotRunning)
return;
QProcess killProcess(0);//创建新进程用taskkill强行结束ocd进程
killProcess.setProgram("taskkill");
killProcess.setNativeArguments(QString("/F /PID %1").arg(process->pid()->dwProcessId));
killProcess.start();
killProcess.waitForFinished();
}
//返回当前OCD进程是否正在运行
bool OpenOCD::isRunning()
{
return process->state()==QProcess::Running;
}