Ist es legal Interruptadressen im laufenden Programm zu ändern,

OP #3169744
Lesenswert?

... bringt es Probleme oder ist es schlechter Stil?

Hallo,

Betriebssysteme machen ja sowas indem einige Einträge der
Vektortabelle ins RAM zeigen und dieses beim Start des
Programms entsprechend initialisiert wird. Das ist in manchen
Situationen schon hilfreich, spricht etwas dagegen?

Vielen Dank für eure Antworten
#3169749
Lesenswert?

> Hallo,
>
> Betriebssysteme machen ja sowas indem einige Einträge der
> Vektortabelle ins RAM zeigen und dieses beim Start des
> Programms entsprechend initialisiert wird. Das ist in manchen
> Situationen schon hilfreich, spricht etwas dagegen?
>
> Vielen Dank für eure Antworten

Wenn Du es besser machst als KleineSoftware...
Gast #3169784
Lesenswert?

Guido B. schrieb:
> Betriebssysteme machen ja sowas indem einige Einträge der
> Vektortabelle ins RAM zeigen und dieses beim Start des
> Programms entsprechend initialisiert wird.

Das ist nicht die einzige Möglichkeit, wo das sinnvoll sein kann. Viele 
Bootloader und Startup-Codes füllen die Sprungtabellen erst nach dem 
Selbsttest aus. Grundsätzlich bevorzuge ich auch feste Routinen und 
Tabellen, die darauf verweisen (das wird also vom Linker festgelegt), 
aber für bestimmte Zwecke habe ich z.B. eine Bootloader/Monitor-Software 
mit Debugzugriff, die eine Minimal-Ausstattung an Hardware 
initialisiert, wenn die normale Steuerungssoftware gestartet wird, kann 
sie sich die Ausstattung nochmal selbst zurechtschnitzen und eine andere 
Sprungtabelle verwenden.

Prinzipiell gibt es 2 Möglichkeiten:

1. Eine Sprungtabelle, die vom Linker ausgefüllt wird.

2. Eine leere Sprungtabelle im RAM, die von der jeweiligen 
Initialisierungssoftware gefüllt wird, d.h. die Routine UART1_INIT trägt 
auch den IRQ-Vector ein - so kann man ein Modul für UART1 schreiben, 
ähnlich wie bei Objekt-Orientierter Programmierung. Methode 2 wird daher 
eher von C-Compilern bevorzugt. Ausserdem geht es nicht anders, wenn man 
Software dynamisch nachladen will (wie Treiber unter Windows oder jedem 
anderen höheren Betriebssystem).

Gruss Reinhard
Gast #3169839
Lesenswert?

Reinhard Kern schrieb:
> Prinzipiell gibt es 2 Möglichkeiten:

Die dritte ist das man die Interruptroutinen eines Interrupts verkettet. 
So kann sich jederzeit eine neue Routine einhängen oder aushängen, wenn 
sie nicht mehr benötigt wird.


Siebzehn und Fuenfzehn schrieb:
> Mindestens der Reset Vektor sollte fest sein....
 Das ist nicht unbedingt notwendig, es sollte aber dafür gesorgt sein 
das er jederzeit definiert ist, besonders nach dem einschalten.

.. man sollte diese Techniken aber gut im Griff haben sonst friert das 
System schnell mal ein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren