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.