reti statt bad interrupt

Gast #4148706
Lesenswert?

Kann man dem avr-gcc irgendwie z.B. per Parameter beibringen, anstatt 
des Aufrufs von "bad interrupt" einfach "reti" in die Interrupt Table 
reinzuschreiben? Standardmäßig wird ja ein Sprung nach 0 gemacht, was 
einem Reset gleichkommt.
Der Hintergrund ist der, dass ich einen Bootloader schreibe. Kommt es 
nun zu einem Reset und es sind noch Interrupts aktiv (andere als im 
Bootloader), werden diese natürlich nicht korrekt behandelt und der 
Bootloader bleibt hängen. Leider habe ich zu wenig Platz, daher wäre es 
praktisch, einfach diese (je) zwei Bytes für reti direkt in der 
Interrupt Table zu haben.
#4148996
Lesenswert?

Herbert schrieb:
> Der Sprung nach 0 ist der Default bei nicht definierter ISR.

Jetzt versteh ich's dann nicht mehr. Warum aktiviert dein Programm denn 
Interrupts, für die keine ISRs definiert sind? Du schreibst doch:

Herbert schrieb:
> Der Hintergrund ist der, dass ich einen Bootloader schreibe. Kommt es
> nun zu einem Reset und es sind noch Interrupts aktiv [...]

Und nun frage ich mich, was für einen "Reset" du hier meinst. Kommt es 
zu einem echten Reset, sind danach keine Interrupts mehr aktiv, und das 
Problem existiert nicht. Wird stattdessen, wie du hier nun sagst, durch 
eine nicht definierte ISR ein Sprung nach 0 gemacht, dann ergibt sich 
die Frage, warum dein Programm den entsprechenden Interrupt überhaupt 
einschaltet.
Moderator Persönliche Seite #4149350
Lesenswert?

Sinnvoller wäre es unter diesen Umständen, im Bootloader einfach
komplett auf Interrupts zu verzichten und sie per cli abzuschalten.

Die Applikation sollte man dann wohl per Watchdog-Reset anspringen,
damit sichergestellt ist, dass sie nicht mit Altlasten der vorherigen
Applikation kämpfen muss.

Ansonsten: mit dem in der Bibliothek mitglieferten crt0.o kannst du
es nicht erreichen, die RETIs direkt in die Vektortabelle zu
bekommen, aber wenn du das partout willst, hindert dich natürlich
niemand daran, dein eigenes Startup-File zu schreiben und linken zu
lassen.

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