Hallo, ich habe mal eine Frage zu diesem Artikel und dem Listing: https://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#Empfangen_von_Zeichen_per_Interrupt Angenommen ich sende zehn Zeichen, dann müssten ja auch zehn Interrupts ausgelöst werden. Wie realisiere ich aber einen Empfangsbuffer zur Aufnahme der Zeichen, wenn die Zeichenanzahl an sich unbekannt ist. Sie ist halt >0 und <50. Also variabel. Soviel kann ich sagen. Für die max. 49 Zeichen ist Speicher im SRAM vorhanden. Also die Zeichen werden empfangen, zwischengespeichert und wenn z.B. 100 ms nichts mehr passiert, dann soll der Buffer abgearbeitet werden. Die Baudrate ist maximal 115K und Minimal 9K6. Da müssten 100 ms Wartezeit wohl reichen - oder? Cheffe_von_Nix
Also ich weiss nicht was schlimmer ist: ein Timeout oder ein CR/LF abwarten... Für Dich ist das mit dem Timeout fast vernünftiger... Bis jetzt habe ich CR/LF benutzt, und die String-Empfangsroutine benutzt. Oder aber manuell ein Flag gesetzt, um nicht unnötig Ressourcen zu verschwenden.... Gruss Chregu
@Cheffe_von_Nix (Gast) >Angenommen ich sende zehn Zeichen, dann müssten ja auch zehn Interrupts >ausgelöst werden. Wenn deine ISR schnell genug ist und bei jedem Aufruf nur ein Zeichen liest, dann ja. In diesem Beispiel ganz sicher, weil es keine anderen Interrupts gibt. >Wie realisiere ich aber einen Empfangsbuffer zur Aufnahme der Zeichen, >wenn die Zeichenanzahl an sich unbekannt ist. Dazu baut man einen FIFO in Software. Dort schreibt der Interrupt die Zeichen rein, solange noch mindestesn ein Zeichen frei ist. Wenn nicht, muss das Zeichen weggeworfen werden und sinnvollerweise ein FIFO Überlauf signalisiert werden. >Also die Zeichen werden empfangen, zwischengespeichert und wenn z.B. 100 >ms nichts mehr passiert, dann soll der Buffer abgearbeitet werden. Kann man machen, muss man aber nicht. Besser ist es, die Abarbeitung zu starten, wenn entweder mindestens N Zeichen im Puffer sind oder ein spezielles Zeilenendezeichen empfangen wurde. Timeouts sind hier nur die zweitbeste Lösung, u.a. weil sie baudratenabhängig sind.
Hallo, vielen Dank. Ich habe herausgefunden, dass immer ein ";" am Ende kommt. Kein CR/LF oder so. Das kann ich dann ja abfangen. Gruß Cheffe_von_Nix
Cheffe_von_Nix schrieb: > Ich habe herausgefunden, dass immer ein ";" am Ende > kommt. Kein CR/LF oder so. Für die Empfangsroutine macht das keinen Unterschied. Gruss Chregu
Hi Das 'riecht' dann aber danach, daß die Werte, die davor übertragen werden, in 'menschen lesbarer Form' übertragen werden - sonst könnte ein ';' nämlich auch ein normales Byte sein. Wobei Das dann wohl eher in den Bereich 'Verarbeitung' gebraucht wird. MfG
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.