Ich schreibe ein Programm in C für PIC32 uC, die eine globale Variable (Uint32_t-Typ), die von mehreren Interrupt Service Routinen und von der Main gelesen/geändert werden können.
Ich weiß, dass das nicht sicher ist, also habe ich mich gefragt, wie man es sicher macht? Gibt es ein Beispiel, das zeigt, wie man es sicher macht?Gemeinsame Nutzung von globalen Variablen mit mehreren Interrupt-Service-Routinen in C
Edit 1:
Kann Interrupts unterbrechen einander? ja
Aktualisiert die ISR die Variable? ja Ändert Main die Variable? ja Sind schreibt und liest die Variable Atom und wie weißt du? Nicht sicher
Gibt es ein RTOS? Kein
Der sicherste Weg ist: Tu das nicht! BTW Ich hoffe, Sie haben diese Variable als "flüchtig" definiert. – LPs
Nun, es klingt wie Sie eine freistehende Umgebung verwenden, so C nicht viel vorschreibt, aber wenn Sie tragbaren Code schreiben wollten, würden Sie sich C11-Entwurf Standard n1570 ansehen: * 5.1.2.3 Programmausführung 5 Wann die Verarbeitung der abstrakten Maschine wird durch Empfang eines Signals unterbrochen, die Werte von Objekten, die weder sperrfreie atomare Objekte noch vom Typ flüchtig sig_atomic_t sind, sind nicht spezifiziert [...]. Der Wert eines Objekts, das vom Handler geändert wurde, der weder ein blockierungsfreies atomares Objekt noch vom Typ volatile sig_atomic_t ist, wird unbestimmt, wenn der Handler den [...] * – EOF
ausführt Wenn Sie so eingerichtet sind, dass Interrupts deaktiviert sind Wenn Sie Interrupts bearbeiten, müssen Sie die Interrupts auch überall dort abschalten, wo Sie das globale Hauptverzeichnis lesen oder ändern. – Ross