Hi,
Du solltest Dir zunächst eine Grundsätzliche Frage stellen: sollen die Daten zwischen Deinem Board und dem PC binär oder im ASCII Format übertragen werden?
a) binär
Bei einer binären Übertragung kannst Du viel mehr Messwerte pro Sekunde übertragen. Auch die Befehle vom PC zum Board sind einzelne Opcodes (Bytes). Benötigt allerdings eine spezielle Software auf der PC Seite die Du selbst schreiben musst.
b) im ASCII Format
Hierbei werden Messwerte und Befehle zum Board im Textformat übertragen. Dies hat den Vorteil, dass Du auch Hyperterminal zur Kommunikation nutzen kannst. Nachteil: viel langsamer als binär.
Grundsätzlich:
Deine Idee mit dem Echo auf Seiten des Boards zu implementieren ist gut. So kannst Du auf der PC Seite gleich sehen, ob die Bytes/Zeichen, die Du zum Board geschickt hast, korrekt angekommen sind.
Da Du offensichtlich zu dem Thema "Datenaustausch zwischen PC und Board" noch nicht viel Erfahrung hast, empfehle ich Dir Variante "b" - alleine schon um Hyperterminal nutzen zu können.
Wenn Variante "b" genutzt werden soll:
Es ist üblich, Kommandos vom PC an das Board mit "ENTER" abzuschließen, d.h. der ASCII Code 13 wird am Ende des Befehles gesendet.
D.h. auf Deinem Board müsstest Du auf das Byte 13 warten und erst dann die bis dahin empfangenen Zeichen auf einen bekannten Befehl hin zu vergleichen.
Beispiel eines Pseudocodes für das Board um Befehle zu erkennen:
Beachte jedoch: der obige Pseudocode enthält noch keine Überprüfung ob die empfangenen Zeichen noch in den Empfangspuffer (<Empfangene Zeichenkette>) hineinpassen.Code:if (<Zeichen empfangen>==TRUE) { SendeZeichenkette (<Empfangenes Zeichen>); // ECHO if (<Empfangenes Zeichen>!=13) { // KEIN ENTER EMPFANGEN, ALSO BUCHSTABEN WEITER SAMMELN: <Empfangene Zeichenkette> = <Empfangene Zeichenkette> + <Empfangenes Zeichen>; } else { // ENTER EMPFANGEN (Achtung: das ENTER wird nicht zur <Empfangenen Zeichenkette> hinzugefügt! if (<Empfangene Zeichenkette>=="GET TEMP") { // Temperatur abfrage: d.h. Temperatur an den PC senden SendeZeichenkette ("TEMP="); SendeZeichenkette (itoa(iTemperature)); SendeZeichenkette (13); <Empfangene Zeichenkette> = ""; } else if (<Erste Neun Zeichen der empfangenen Zeichenkette>=="SET TEMP ") { <Parameter Zeichenkette> = <von der empfangenen Zeichenkette die Zeichen ab der zehnten Stelle>; atoi (<Parameter Zeichenkette>,&iParameterzahl); // ASCII Zahl in binär Zahl umwandeln. Bsp."23" in 23 if (iParameterzahl>=15) AND (iParameterzahl<=20) { SetzeTemperatur (iParameterzahl); SendeZeichenkette ("OK"); } else { SendeZeichenkette ("INVALID VALUE FOR SET TEMP. VALID VALUE = 15 .. 20"); } SendeZeichenkette (13); <Empfangene Zeichenkette> = ""; } else { SendeZeichenkette ("INVALID COMMAND."); SendeZeichenkette (13); <Empfangene Zeichenkette> = ""; } } }
Ich empfehle Dir dringend, dies hier aufmerksam durch zu lesen:
http://www.rn-wissen.de/index.php/Av...rstellung_in_C
http://www.rn-wissen.de/index.php/C-...ichenketten.29
Dort findest Du einige Hinweise zum Thema Strings in C.
Lesezeichen