Hallo Freunde,
bisher hab ich mich fast ausschließlich mit der µC-Programmierung
beschäftigt. Nun hab ich mich ein wenig in die PC-Programmierung mit C#
eingelesen und habe mir recht schnell eine Klasse zur Kommunikation mit
dem µC geschrieben, inkl. GUI per WinForms.
Nun brauche ich einen kleinen Denkanstoß, denn ich finde, so wie ich es
derzeit mache, ist reinster Pfusch.
Vorweg: Momentan funktioniert alles einwandfrei. Wenn serielle Kommandos
allerdings recht schnell wiederholt von der GUI gesendet werden, gibt es
oft "Kollisionen". Mein µC sendet nach jedem erkannten Kommando eine
eigene Bestätigungssequenz.
Wenn diese Sequenz erkannt wird, schalte ich einen Bool-Typ auf true,
welcher anschließend wieder auf false gesetzt wird.
Hier mal ein Auszug der das veranschaulicht:
1 | try
|
2 | {
|
3 | MyComPort.Open();
|
4 | if (MyComPort.IsOpen == true)
|
5 | {
|
6 | Befehl(BefehlVerbinden);
|
7 | while (rx_antwort == false)
|
8 | ;
|
9 | Befehl(BefehlConfig);
|
10 | }
|
11 | }
|
12 | catch (Exception ex)
|
13 | {
|
14 | MessageBox.Show("Fehler beim öffnen des Ports!\r\n" + ex.Message, "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
|
15 | }
|
Wie man erkennen kann, sitzt hier eine while-Schleife dazwischen die nur
darauf wartet, endlich eine Antwort zu bekommen, damit der nächste
Befehl gesendet werden kann. Bis die Antwort kommt, steht das Programm
aber. Das haut zwar hin nur frage ich mich, wie man das schöner lösen
könnte.
Hat da vielleicht jemand einen Tipp?
PS: Empfangene Daten werden per SerialDataReceivedEventArgs und
anschließender Auswertung bearbeitet.
LG,
roblue