Hi, kann mir vielleicht jemand sagen wozu Software Interrupts gut sein sollen weil davon immer in diversen Tutorials und Büchern ganz groß geredet wird. mfg Paul H.
Softwareinterrupts sind wie stinknormale Funktionsaufrufe, braucht man also auf MCs überhaupt nicht. Sie sind nur auf CPUs mit Betriebssystem und verschiedenen Ausführungsleveln sinnvoll, um API-Funktionen aufzurufen. Der einzige Unterschied zu normalen Funktionsaufrufen ist dann der, daß sie wie Interrupts mit höheren Zugriffsrechten laufen. Daher heißen sie fälschlicher Weise Interrupts. Es sind aber keine Interrupts, die das Hauptprogramm zufällig unterbrechen können, sondern Unterfunktionen, die eben nur an den Stellen ausgeführt werden, an denen sie explizit aufgerufen werden. Es können also wie bei Funktionen Parameter übergeben werden und es sind keine gekapselten Zugriffe auf gemeinsame Variablen notwendig. Peter
Softwareinterrupts werden bei CPUs z.B. verwendet, um Betriebssystemfunktionen aufzurufen. Natürlich könnte man das auch über Unterfunktionsaufrufe lösen, aber je nach Architektur nimmt einem die Hardware bei einem Softwareinterrupt manche Verwaltungstätigkeiten (Kontext sichern, in einen höher privegierten Betriebsmodus umschalten...) ab, die man für einen Betriebssystemaufruf erledigt haben möchte. Bei einem kleinen uC ohne Betriebssystem halte ich Softwareinterrupts hingegen nicht für notwendig, auch wenn es auch dort Architekturen gibt, die sowas implementieren.
ne, ganz so einfach ist das nicht. Allerdings findet man auf den ganz einfachen MCs tatsächlich keine. Könnte z.B. sein: -unbekannter instruction-code -Division durch 0 -fehlerhafte FP-Operation(NaN, +INF, -INF) -diverse "verbotene" Speicherzugriffe (z.B. stack under/overflow) Gibt noch ein paar andere sinnvolle Möglichkeiten
Software-Interrupts werden zur Vermeidung dieser Verwirrung manchmal auch Software-Traps genannt. Durchgeführt werden sie von speziellen Befehlen und es wird zunächst ein Trap-Handler aufgerufen, der abhängig von weiterem Inhalt des Trap-Befehls oder eines Registers weiter verzweigen kann. Darin wird meist die Nummer einer Funktion angegeben, nicht deren Adresse. In Betriebssystemen werden solche Traps für den Aufrufe der Betriebssystemfunktionen verwendet, weil das aufrufende Programm im Anwendermodus arbeitet, die Betriebssystemfunktionen jedoch im privilegierten Modus. Ohne Betriebssystem findet man das manchmal auf ARMs. Sofern nämlich das Hauptprogramm im nichtprivilegierten Modus läuft. Dann müssen Traps für einzelne privilegierte Funktionen implementiert sein, wie Ein/Ausschalten von Interrupts. Geschmacksfrage, manche schwören drauf, ich halte das in einer betriebssystemfreien Umgebung für sinnlos.
> -unbekannter instruction-code > -Division durch 0 > -fehlerhafte FP-Operation(NaN, +INF, -INF) > -diverse "verbotene" Speicherzugriffe (z.B. stack under/overflow) > Gibt noch ein paar andere sinnvolle Möglichkeiten Das sind keine Software-Interrupts/Traps sondern Hardware-Traps. Zum Software-Interrupt/Trap wird es durch Vorsatz und dafür vorgesehene Befehle.
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.