-
-
Erfahrener Benutzer
Robotik Visionär
Nicht einfach, aber so etwa kann man das Problem schon verstehen.
Man kann in einer ISR den Interrupt wieder frei geben. Das sperren geht automatisch muss also nicht in Software per CLI erfolgen. Man kann den Interrupt nur wieder frei geben per SEI. Das ist durchaus in Ordnung, man muss aber etwas aufpassen was man macht.
Problematisch wird es aber wenn sich eine ISR sozusagen selber unterbricht. Bei einem Timer Interrupt kann man das oft ausschließen, bei einem externen Interrupt ist das aber nicht so so sicher. Notfalls kann sich helfen, indem man erst den Speiziellen Interrupt der die ISR ausgelöst hat sperrt und erst dann per SEI global interrupts frei gibt. Wegen des extra Aufwandes ist das aber oft auch kleine Lösung, weil dann noch weniger Zeit zur Verfügung steht.
Zusätzlich muss man den höheren Platzbedarf auf den Stack berücksichtigen. Eventuell ist dann auch die Reihenfolge in der die Interrupts abgearbeitet werden nicht ganz die die man erwartet.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen