Das stimmt, um das zu vermeiden mache ich es so:Der obige ansatz fürt zu sporadischen Fehlern wenn der Interrupt zu ungünstiger Zeit auftritt.
Wenn 0x0D empfangen wurde, schalte ich RXCIE ab, und setze noch in der SIG_UART_RECV irgendein Bit auf 1 (ich definiere mir immer eine uint8_t Variable als Volatile, dann habe ich 8 Flags zu Verfügung.)
in der main funktion wird der Flag dauernd abgefragt, und falls 1, wird verglichen.
Danach, wenn Vergleich abgearbeitet ist wird der Flag gelöscht und RXCIE wieder eingeschaltet.
Es ist vielleicht nicht super optimal, es fiel mir aber dazu nichts besseres ein, als ich mich damit seinerzeit beschäftigt habe.
Deine Beispiele werde ich mir mal in RUHE mal angucken, danke.
Ich hätte da auch ein Beispiel gepostet, aber funky will ja auch was lernen.
Gruß Sebastian
Lesezeichen