Ich habe ein Programm, das an ST-Link angeschlossen ist. Im Moment können Sie eine Firmware aus einer Combobox auswählen, Start drücken und die Firmware auf der Platine programmieren, die an den ST-LInk angeschlossen ist.Ich kann keine Daten vom CLI lesen
Dazu verwende ich eine CLI, um Befehle mit ST-LINK_CLI.exe an den ST-Link zu senden. Sobald die Firmware programmiert ist, erscheint sie an der Eingabeaufforderung: "Anwendung zum Beenden ausführen". Hier drückt der Benutzer die Eingabetaste, und die Anwendung läuft auf der Karte und das CLI wird beendet.
Was ich jedoch tun muss, ist nicht die Eingabeaufforderung zu haben, wo der Benutzer die Eingabetaste drückt und es einfach automatisch macht.
Meine Idee war es, die Ausgabe von der CLI zu lesen, und herauszufinden, was die Ausgabe ist, wenn der Benutzer aufgefordert wird. Ich dachte, ich könnte dann eine Schleife machen, die Ausgabedaten werden eingelesen und wenn es mit den Ausgabedaten übereinstimmt, wenn der Benutzer die Eingabetaste drücken muss, werde ich SendKeys.Send ("{ENTER}") verwenden.
Allerdings habe ich Probleme beim Lesen der Daten. Die folgenden nicht funktioniert:
string STPath = @"C:\Users\Falconex\Documents\FalconexTest\FalconexTest\ST-LINK Utility\ST-LINK_CLI.exe";
string path2 = @"C:\Users\Falconex\Documents\FalconexTest\FalconexTest\Firmware\PXL3-DELL-2B.SREC";
Process p = new Process();
p.StartInfo.FileName = STPath;
p.StartInfo.Arguments = "-ME -p " + firmwareLocation + " -v -Run ";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
while (!p.StandardOutput.EndOfStream)
{
string line = p.StandardOutput.ReadLine();
File.WriteAllText("New.txt", line);
}
Das Folgende ist die Fehlermeldung, die aufkommt: „eine nicht behandelte Ausnahme des Typs‚System.InvalidOperationException‘aufgetreten in System.dll und zeigt auf das Ende des Stromteil.
ich habe mich gefragt, ob jemand wusste, warum dies geschah? Oder wenn es einen anderen Weg, um die prompte Ausgabe ist?
Dank Lucy
Ist dies eine geschäftige Schleife? Wenn dies der Fall ist, kann es sinnvoll sein, einen "Ruhezustand" -Aufruf (möglicherweise für 50 Millisekunden) hinzuzufügen, um die Anzahl der gesendeten Tastendrücke und den Umfang der CPU-Auslastung zu begrenzen. –
Das ist eine gute Idee, danke – lucycopp