Und schon habe ich das naechste Problem: Ich habe Daten die zwischen einem Interrupthandler und dem Rest vom Code benutzt werden. Es handelt sich dabei nicht um einzelne Variablen sondern um mehrere zusammengehoerdende Werte. Wenn ich beim Zugriff pauschal alle Interrupts ausschalte muss ich wohl damit rechnen einzelnen Interrupts zu verpassen. Gibt es noch andere Moeglichkeiten? Wie sieht es mit einem Mutex aus? Gibt es da fertige Ansaetze? Welche Moeglichkeiten habe ich noch den Zugriff sauber zu regeln? Danke fuer eure Hilfe!
Semaphore: (siehe Lösung von Djikstra) http://de.wikipedia.org/wiki/Semaphor_%28Informatik%29 Bolt-Variable: http://de.wikipedia.org/wiki/Bolt-Variable beides geht relativ fix zu implementieren. Ich kenn mich leider nicht mit dem STM32 bzw. dessen LIBs aus.
So einfach ist das fuer mich nicht! Fuer eine Mutex Implementierung brauche ich genau das wonach ich Suche: mehrere zusammenhaengende atomare Operationen!
wigo schrieb: > Wenn ich beim Zugriff pauschal alle Interrupts ausschalte muss ich wohl > damit rechnen einzelnen Interrupts zu verpassen. Es reicht, den speziellen Interrupt zu sperren. Es werden ja wohl nicht alle Interrupt-Handler auf diese Struktur zugreifen. Wenn in der Zeit des Sperrens ein Interrupt-Ereignis auftritt, wird der Interrupt automatisch sofort bei Wieder-Freigabe bearbeitet. Interrupts verlieren würdest Du nur, wenn die Sperrdauer > Interrupt-Periode wäre. HDH, scherenschleifer
scherenschleifer schrieb: > wigo schrieb: > >> Wenn ich beim Zugriff pauschal alle Interrupts ausschalte muss ich wohl >> damit rechnen einzelnen Interrupts zu verpassen. > > Es reicht, den speziellen Interrupt zu sperren. Es > werden ja wohl nicht alle Interrupt-Handler auf diese > Struktur zugreifen. > > Wenn in der Zeit des Sperrens ein Interrupt-Ereignis auftritt, > wird der Interrupt automatisch sofort bei Wieder-Freigabe bearbeitet. > > Interrupts verlieren würdest Du nur, wenn die Sperrdauer > > Interrupt-Periode > wäre. Danke. War etwas Betriebsblind. Scheint zu funktionieren.
Wenn auf gemeinsame Daten sowohl in Interrupts als auch außerhalb zugegriffen werden ist ein Sperren des Interrupts ohnehin unerlässlich! Ein Interrupt kann schließlich nicht warten, bis ein Mutex freigegeben wird, er blockiert ja die normale Ausführung. Mutexe ergeben nur bei Multitasking zur Synchronisation zwischen Threads Sinn. Locks innerhalb von Interrupts wiederum braucht man nur bei Mehrprozessorsystemen zur Synchronisation zwischen Cores (lokal müssen zusätzlich Interrupts gesperrt werden).
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.