Zur Uart-Programmierung verwende die C-Bibliothek von Peter Fleury. Hier gibt es die Möglichkeit einen einzelnen Charakter zu empfangen (uart_getc()). Wie bewerkstellige ich das Einlesen eines ganzen Strings (Text von einem externen Messgerät)? Hat hier jemand schon mal was programmiert?
Das allerwichtigste, das du klären musst ist: Woran kann man erkennen das der übertragene String jetzt zuende ist? Das ist das der Dreh- und Angelpunkt in der ganzen Sache. Normalerweise wird dazu ein spezielles Zeichen benutzt. Sei dies jetzt ein Carriage Return oder ein ';', sei es ein '.' oder sonst irgendein Sonderzeichen. Denkbar wäre auch, dass mit dem ersten Leerzeichen der String zuende ist, oder das der zu übertragende String in " eingeschlossen wird. Es gibt mit Sicherheit noch x andere verschiedene Möglichkeiten die mir jetzt in 20 Sekunden nicht einfallen. Und daher gibt es keine fertige Funktionen. In dem Moment aber, in dem du weist welche Methode du benutzen kannst/willst ergibt sich die String Lesefunktion praktisch von selbst. Es läuft letztendlich immer auf eine Schleife hinaus, die einzelne Zeichen einiest und im Zielstring speichert. Wie die Schleifenabbruchbedingung jetzt konkret aussieht ergibt sich aus der gewählten Methode, wie das Ende des zu übertragenden Strings aussieht. Benutzt du zb. einen ';' void uart_gets( char* Buffer, int BufferLen ) { int i = 0; char c; while( ( c = uart_getc() ) != ';' && i < BufferLen - 1 ) Buffer[ i++ ] = c; Buffer[i] = '\0'; }
Danke!! ich hatte schon eine ähnliche Routine geschrieben nur wollte das nicht klappen. Der Grund lag darin, dass ich bevor ich die Daten empfangen kann, dem Messgerät einen Befehl senden muss, dass er die Messdaten senden soll. Der Art: uart_puts("$SP\r"); <-- Sende Powerwert Frage ich danach sofort ab (siehe deine Funktion) dann klappt das nicht! Ich musste eine Verzögerung von einigen ms einbauen! Nun klappt es! Obwohl mir das nicht ganz klar ist! Ist doch die Abfrage interrupt- gesteuert! Das Eintreffen eines Zeichens, wird doch durch eine Interruptroutine festgestellt. Vielleicht komme ich noch dahinter.
Überleg dir mal: Was genau macht die uart_getc() ? Welche Bedingungen muessen erfüllt sein, damit uart_getc() seinen return ausführt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.