... 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
> 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...
Lothar S. schrieb: > Wenn Du es besser machst als KleineSoftware... Das steht außer Frage ;-). Ich will mir nur nicht selber ein Bein stellen weil ich irgendetwas blödes übersehen habe.
Ich möchte die Frage mal wörtlich nehmen. Niemand wird bestraft, wenn er es trotzdem macht. Ist also nicht illegal.
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
Mindestens der Reset Vektor sollte fest sein....
Guido B. schrieb: > Ich will mir nur nicht selber ein Bein stellen weil ich > irgendetwas blödes übersehen habe. Während du den Vektor änders, solltest du den betreffenden Interrupt vielleicht sperren ;-)
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.
Michael A. schrieb: > Während du den Vektor änders, solltest du den betreffenden Interrupt > vielleicht sperren ;-) Nur nötig wenn die Änderung nicht atomar ist. Natürlich sollte das System dann damit zurecht kommen, dass um den Dreh herum unklar ist, welchen Vektor es erwischen sollte, den alten oder den neuen. Guido B. schrieb: > spricht etwas dagegen? Nein.
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.