Reihenfolge von Befehlen
-
Es geht um Folgendes: Ich habe einen Ring-Speicher (FIFO). Der wird regelmäßig mit einem Interrupt mit Daten befüllt. Der Ring-Speicher wird ab und zu vom Hauptprogramm geleert.
void daten_verarbeiten() { interrupts_off(); while(!ring_buffer.is_empty()) { uint8_t byte = ring_buffer.pop_front(); // byte verarbeiten. } interrupts_on(); }
Kann ich davon ausgehen, dass die Interrupts auch wirklich abgeschaltet werden, bevor ich die Daten verarbeite, oder ist es möglich, dass der Compiler ein wenig optimier-Magie betreibt und plötzlich Daten verarbeitet werden, bevor die Interrupts aus sind?
-
Wenn
interrupts_off
undinterrupts_on
passend implementiert sind, dann ist garantiert dass das funktioniert wie gewünscht.Natürlich nur unter der Voraussetzung dass es nur einen Core gibt. Wenn es >= zwei Cores gibt, dann könnte u.U. dein Code auf einen Core laufen, und der Interrupt auf einem anderen. Und dann wäre es möglich dass der Interrupt noch läuft während dein Code auf die FIFO zugreift. Nämlich wenn der Interrupt kurz vor der Ausführung von
interrupts_off
zu laufen begonnen hat.
-
Es handelt sich nur um einen Core (Cortex M4). Danke sehr!