Forum: Mikrocontroller und Digitale Elektronik STM32F4DISCOVERY atomare Operationen/Mutex?


von wigo (Gast)


Lesenswert?

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!

von endurance (Gast)


Lesenswert?

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.

von wigo (Gast)


Lesenswert?

So einfach ist das fuer mich nicht! Fuer eine Mutex Implementierung 
brauche ich genau das wonach ich Suche: mehrere zusammenhaengende 
atomare Operationen!

von scherenschleifer (Gast)


Lesenswert?

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

von wigo (Gast)


Lesenswert?

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.

von Andreas B. (andreas_b77)


Lesenswert?

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
Noch kein Account? Hier anmelden.