Ich habe mir das fast ganz abgewöhnt, mit Config SerialIn= Buffered zu arbeiten, weil es häufig zu Timing Problemen kommt. Dabei wird nämlich auch der URXC Interrupt verwendet und zusätzlich noch die eigene SerialCharMatch Routine.
Um dies zu umgehen verwende ich jetzt immer den URXC Interrupt direkt. Und ich versuche, die eingehenden Zeichen schon einmal "vorzuverarbeiten", soweit dies geht. Dann musst du nicht so viel Zeit in die Verarbeitung stecken, wenn der Datensatz komplett ist.
Wenn du dann noch das letzte rauskitzeln willst, rufst du die ISR mit Nosave auf, da häufig nur wenige Register zu sichern sind. Da musst du aber ein bisschen vorsichtig sein.
Dann zeige doch mal, wie du an die Verarbeitung rangegangen bist.
Die ISRs unterbrechen sich nicht gegenseitig, wenn du das nicht explizit zugelassen hast - wovon du eh lieber die Finger lassen solltest. Ein Aufruf wird immer erst zu Ende gebracht, bevor die nächste ISR aufgerufen wird. Allerdings kommt dein Hauptprogramm dabei evtl. etwas zu kurz.
Das Zurückschicken kannst du natürlich auch gepuffert machen, sodass dir hoffentlich nichts verloren geht.
Lesezeichen