Bei der Ausgangslage wird dir kaum jemand eine konkrete Hilfestellung
geben können. Was heißt "es stehen dir keine Interrupts zur Verfügung"?
"Willkürlicher" Reset? Von welchen Interrupts sprechen wir? überhaupt?
Denjenigen der Anwendung, oder benutzt du diese auch im Bootloader? Ggf.
musst du die Adresse der Vektoren verschieben. Details hierzu finden
sich im Datenblatt. Außerdem musst du sicherstellen, dass alles richtig
gelinkt wird.
Noch etwas grundsätzliches zum Thema Bootloader: Ich persönlich
implementiere so etwas immer "anders" herum, d.h. bei einem Reset wird
der Bootloader angesprungen (von der Hardware), welcher dann nach einem
Timeout (oder wann auch immer du Lust hast) in die Hauptapplikation
(0x0000) springt. Um aus der Hauptapplikation heraus zum Bootloader zu
gelangen, reicht dann ein gewöhnlicher Watchdog Reset.
Dies hat den Vorteil, dass du im Bootloader einen wohldefinierten
Zustand hast (nach Reset), und diesen dem Anspringen der
Hauptapplikation wieder herstellen kannst. Prinzipiell kannst du
natürlich auch in deiner Anwendung dafür sorgen, dass benutzte
Peripherie und Register entsprechend zurückgesetzt werden. In der Praxis
ist das aber weitaus schwieriger umzusetzen, zu mal ein Fehler in der
Anwendung dich ggf. nicht mehr zum Bootloader kommen lässt. Da man die
Anwendung i.d.R. öfter ändert und flasht, den Bootloader aber nur
selten, ist das "sicherer".
Mit freundlichen Grüßen,
Karol Babioch