Hallo, ich empfange über eine Interruptroutine Datensätze und speichere sie in einem globalen Vektor aus Strings ab: char UART_buffer[UART_bufferfields][UART_buffersize]; Eine Variable namens new_messages verwende ich dazu um in einem Zähler die Anzahl der neuen noch nicht ausgewerteten Strings UART_buffer[UART_bufferfields] zu speichern. Inkrementiert wird in der Interruptroutine wenn ein neuer Datensatz/String UART_buffer[n] komplett ist. new_messages habe ich global als uint8_t volatile new_messages = 0; initialisiert. In main überprüfe ich nun mittels while(1){ .. if(new_messages > 0){ ... //Daten auswerten new_messages--; } .. } ob neue Daten zum auswerten da sind, falls ja werte ich aus und verringere den Zähler new_message um eins. Zweck der ganzen Sache soll sein zu verhindern, dass beim auswerten nicht nicht vollständige Datensätze gelesen werden und dass die Auswertung von UART_buffer[k] die einlesende Interruptroutine im Buffer nicht "überholt". Leider funktioniert die ganze Sache nicht. Die Auswertung stockt obwohl eigentlich Datensätze da sein sollten. Kommentiere ich in main die if Abfrage auf neue messages aus läuft zwar die Auswertung, aber es kommt zu dem unerwünschten Effekt, dass Daten verloren gehen wenn die Auswertung schneller ist als neue Datensätze nachfolgen ("überholen" der Vektorindixe). In diesem Fall sehe ich auch wie der Zähler new_messages inkrementiert wird wenn ich ihn auf meinem Display ausgebe. Was mache ich falsch oder wie geht es anderst? Verwende ich volatile falsch? Habe leider keinen JTAG programmer zum debuggen. Danke M.
Keine Vorschläge? Frage unklar? Komme momentan nicht weiter! M.
Violation of Rule #1 (Give Complete Source Code) detected! Thread will be eliminated in 24 hours!
Okay, hat sich erledigt der Fehler liegt wo anderst! M.
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.