hallo, moechte gerne wegen application->bootloader wechsel einen programmsprung zu einer bestimmten code adresse im flash meines avr mikrokontrollers machen. ich muss, aus dem bootloader nicht zurueck in die applikation (wird ueber reset gemacht). mit int main(){ void (*start_boot)(void)=0x1234; // hier sitzt der bootloader code while(1){ ... start_boot(); // irgendwann wenn verlangt ... } } wollte ich das bewerkstelligen (hab das so gelesen). meine Frage: wenn ich das jetzt so realisiere, werden dann wie bei einem normalen funktionsaufruf bestimmte register gerettet und die ruecksprungadresse des aufrufs gespeichert? heisst das, ich habe irgendwo die geretteten daten rumliegen, die ich eigentlich nicht mehr brauche? kann man auf andere weise springen, ohne diese datenretterei?
Can Cobe schrieb: > ich muss, aus dem bootloader nicht > zurueck in die applikation (wird ueber reset gemacht). Andersherum wird ein Schuh draus. Reset aktiviert den Bootloader, der bei nichtvorhandener Ladebedingung in die Applikation springt.
Knut Ballhause schrieb: > Andersherum wird ein Schuh draus. Reset aktiviert den Bootloader, der > > bei nichtvorhandener Ladebedingung in die Applikation springt. Richtig. Sonst wirst du ein verwurstetes Programm nie verlassen können. http://www.mikrocontroller.net/articles/Bootloader mfg.
Can Cobe schrieb: > meine Frage: wenn ich das jetzt so realisiere, werden dann wie bei > > einem normalen funktionsaufruf bestimmte register gerettet und die > > ruecksprungadresse des aufrufs gespeichert? heisst das, ich habe > > irgendwo die geretteten daten rumliegen, die ich eigentlich nicht mehr > > brauche? kann man auf andere weise springen, ohne diese datenretterei? Das ist doch völlig egal. Nach einem Update machst du doch sowieso einen Reset. mfg.
hey danke danke danke... das mit der reihenfolge ist mir jetzt auch klar... wenn ich aber immer aus dem bootloader starte und dann in die applikation springe, dann habe ich noch das problem, dass bestimmte daten gerettet werden, die ich nicht brauche. oder? das waere ja schade um den verschwendeten speicherplatz...
Can Cobe schrieb: > wenn ich aber immer aus dem bootloader starte und dann in die > > applikation springe, dann habe ich noch das problem, dass bestimmte > > daten gerettet werden, die ich nicht brauche. oder? das waere ja schade > > um den verschwendeten speicherplatz... Hast du nicht. Du benutzt einen Jump-Befehl, um in die Applikation zu gehen. Da wird nichts gesichert. Nur bei einem Call oder einem Interrupt wird die Adresse auf dem Stack abgelegt, damit er bei Return weiss, wo er hergekommen ist. mfg.
Es ist völlig egal, mit was für einem Befehl man zur Applikation springt. Der Startup-Code der App initialisiert den Stack-Pointer eh.
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.