Hallo zusammen, ich benutze das STK500 mit einem ATMEGA16L µC. Ich habe ein Programm welches ein String mit einem einem anderen String vergleicht(strcmp) und dann eine Antwort über UART sendet . Soweit gut funzt alles. Das problem ist das die Funktion gets() unbedingt auf eine eingabe wartet und somit mein Hauptprogramm unterbrochen wird. Wie kann ich das realisieren das dies parallel läuft? Über Interrupt vielleicht? Kann mir jemand vielleicht ein Codebeispiel zeigen? Danke im Voraus.
Klar, Interrupt ist die Lösung. Die ISR schreibt die empfangenen Zeichen in einen Ringbuffer, Grösse nach zu erwratendem Datenaufkommen und geplanter Abfragezeit. Verwaltet über einen Schreib- und einen Lesezeiger, dazu einer Variablen, die bei jedem in den Buffer geschriebenen Zeichen incrementiert, bei jedem gelesenen decrementiert wird. Lesen kannst du dann immer was, wenn rx_counter>0.
Danke für die Antwort, ich benutze Codevision AVR, ich habe obigen Codeschnipsel von CVAVR. Das so aufgebaut wie gesagt hast. Frage ist wo bring ich mein eigenen Code unter in der ISR selbst? Und wie kann ich die Abfragezeit einstellen? Mit einem TIMER overflow interrupt?
Du brauchst gar keine Abfragezeit einstellen, und an den ISRs brauchst du auch nichts machen, alles fertig. irgendwo hast du ja eine main-Funktion, und die wird normalerweise zyklisch durchlaufen, und dabei alles abgearbeitet, was zu tun ist. Im einfachsten Fall sieht das dann so aus: void main (void){ if (rx_counter) serielle_daten_verarbeiten(); if (timer_tic) display_aktualisieren(); . . . } Gibt noch andere Ansätze (ich z.B. synchronisiere die main mit einem Timerinterrupt, um konstante Ausführungszeiten auch nach Programmänderungen zu haben) oder eine echte taskverarbeitung (jede task bekommt einen Zeitschlitz zugewiesen, Rückkehr in die main, wenn die AUfgabe fertig oder die max. task-zeit abgelaufen ist) erfordert ziemlich hohen Aufwand für die Verwaltung und verbraucht auch einiges an Ressourcen. Ich habs noch nicht gebraucht.
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.