我正在使用Visual Studio C#应用程序中的CLI命令。该应用程序使用CLI(命令行界面)与Flash Programmer 2(Texas Instruments Software,用于在CC2560中引导加载固件)进行接口。 我检查了StackOverflow中的一些示例,但未能成功实现解决方案。
我的申请步骤:
我的文件位于:D:\ Projects \ Test_Fixture \ Test_Fixture_Visual_Studio \ SmartRF Tools \ Flash Programmer 2 \ bin \ srfprog.exe 当我在CMD(Windows)中执行此操作时,将显示“提示”窗口
此屏幕弹出后,我发送了对芯片进行编程的命令
srfprog -t soc(COM84,CC2650)-e -p -v -f c:\ test.bin 此命令将编程并验证微控制器CC2650中的代码,如下面的屏幕截图所示:
编程非常完美。 但是,当我运行(单击按钮-加载固件)时,我的应用程序立即打开并关闭Shell窗口。如下图所示
我的代码如下:
private void button2_Click(object sender, EventArgs e)
{
System.Diagnostics.Process CC2650 = new System.Diagnostics.Process();
CC2650.StartInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
CC2650.StartInfo.Arguments = "srfprog -t soc(COM84,CC2650) -e -p -v -f c:\test.bin"; //argument
CC2650.StartInfo.UseShellExecute = false;
CC2650.StartInfo.RedirectStandardOutput = true;
CC2650.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
CC2650.StartInfo.CreateNoWindow = false; //not diplay a windows
CC2650.Start();
string output = CC2650.StandardOutput.ReadToEnd(); //The output result
CC2650.WaitForExit();
}
在此测试中,我使用固定的COM端口。稍后,我将选择端口。
为什么我的软件崩溃并且无法加载固件? 感谢您的关注和时间。
答案 0 :(得分:0)
您的代码似乎通过将 srfprog 包含在参数中而加倍。文件名定义了可执行文件,参数应该只是文件名后面的内容。
CC2650.StartInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";
答案 1 :(得分:0)
如前所述,您无需在参数中再次传递程序名称。要检查发生了什么,请使用下面的代码。它将以异步方式读取输出和错误,因此我们可以在srfprog.exe运行时分析输出。 我这里没有任何C#编译器,因此在编写此处之前无法测试此代码,也许您必须进行一些更改才能使其正常工作。请尝试一下,让我知道在Visual Studio输出控制台中将打印什么内容。
// Add "using System.Diagnostics;"
private void button2_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
startInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
Process process = new Process();
process.StartInfo = startInfo;
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
Console.WriteLine(outLine.Data);
}