Hallo kurz eine allgemeine frage: bei den meisten bootloadern wird zu beginn des Flash-speichers (adresse 0000) überprüft, ob der bootloader gestartet werden soll. Das neue Programm wird dann jedoch nicht bei adresse 00 im Flash gespeichert, sondern später. Der Programmstart des neuen Programms ist jedoch für adresse 00 kompiliert, können dadurch probleme entstehen, oder läuft jedes Programm auch an einer anderen Stelle im Flash ? Habe da bedenken, wenn zum beispiel JUMP befehle im Programm enthalten sind, dann wird doch zur falschen Adresse gesprungen ??
Michael L. schrieb: > Habe da bedenken, wenn zum beispiel JUMP befehle im Programm enthalten > sind, dann wird doch zur falschen Adresse gesprungen ?? Ja. RJMP ist relativ, also +/- 2K Words JMP ist absolut ( 0 - 4M) Words. > Das neue > Programm wird dann jedoch nicht bei adresse 00 im Flash gespeichert, > sondern später. Der Programmstart des neuen Programms ist jedoch für > adresse 00 kompiliert, Warum wird der dann auf eine andere Adresse geladen ? Oder anders herum: Warum wird das Programm nicht mit der richtigen Adresse kompiliert ?
aha, muss ich in dem fall im neuen Programm, die Bootloader überprüfung zu beginn direkt integrieren ? So dass ich das neue Programm immer bei adresse 00 ablege ? Sollte das neue Programm jedoch einen Fehler haben, so hab ich mit dem Bootloader keinen zugriff mehr. Warum ich frage: habe mir einen Bootloader für einen Tiny45 programmiert, und bin mir nicht sicher welches die beste Lösung für den Bootloader aufruf ist.
Michael L. schrieb: > aha, muss ich in dem fall im neuen Programm, die Bootloader überprüfung > zu beginn direkt integrieren ? MEGAs haben BOOTRST und IVSEL dafür. ATTINY45 nicht, so YES, wenn das Programm ab 0x00 kompiliert wird. > Sollte das neue Programm jedoch einen Fehler haben, so hab ich mit dem > Bootloader keinen zugriff mehr. Neee, nicht ganz so. Erster Fall (kompilieren ab .org IntVectSize+1): ATTINY45 hat CALL and JUMP überhaupt nicht, so dass die Sache mit dem verschieben 100% funktioniert. Zweiter Fall (kompilieren ab .org 0x00): Musst halt nur aufpassen wie du die erste Page programmierst: a) Buffer mit neuen Flash schreiben, Adresse 0x00 merken b) Adresse 0x00 auf deinen Bootloader ändern c) Wenn fertig, gemerkte Adresse (RESET Vector) irgendwo unterhalb deiner Bootloader routine flashen und hop...
Marc Vesely schrieb: > c) Wenn fertig, gemerkte Adresse (RESET Vector) irgendwo unterhalb > deiner Bootloader routine flashen und hop... Falls ich (mal wieder) etwas verwirrend war: In deinem Bootloader wartest du, sagen wir 1Sec auf Zeichen.Wenn nichts kommt, springst du auf eine vorher fastgelegte Adresse die sich 1 PageSize unterhalb deiner Bootloader Routine befindet. Und auf diese Adresse wird altes RESET Vector geflasht. Wenn das Bootloader selbst programmiert wird, kann diese Adresse unprogrammiert bleiben (0xFF = NOP), PC schreitet munter durch bis zum Bootloader.
Bestens, soweit habe ich das Prinzip verstanden. Wenn ich nun folgendermassen vorgehe: Bootloader auf Adresse 0000 (Page 0) legen und das Anwender-Programm nach dem Bootloader. Aber wie finde ich die Länge des Bootloaders heraus ? Also anders gesagt, wie finde ich heraus, ab welcher Page ich das Anwenderprogramm schreiben darf ? Ich programmiere mit Bascom. Ich kann natürlich den Bootloader kompilieren, und danach die Page manuel im eingeben, und nochmals kompilieren. Ist aber keine elegante Lösung.
Michael L. schrieb: > Wenn ich nun folgendermassen vorgehe: Bootloader auf Adresse 0000 (Page > 0) legen und das Anwender-Programm nach dem Bootloader. Aber wie finde Nein, warum ? Dein neues Programm darf (und kann) dann keine Interrupte benutzen. Also: Bootloader auf: (Flashend - BootloaderSize - 1 Page) zur Sicherheit. Kompiliere Bootloader, ich glaube Bascom muss auch irgendwo Daten uber die Lange des kompilierten Programms bereitstellen, so weisst du welche Adresse in Frage kommt. Aber das ist irrelevant, ich wiederhole mich: Egal auf welche Adresse du das Program ladst, in Tinys funktioniert der 100%, mit Ausnahme der IVs.
Hallo Michael, suche mal nach Fastboot 2.9 von Peter Dannegger PeDa hier im Forum. Damit arbeiten viel und so könntest Du von diesem Code lernen oder ihn gleich benützen. OK ?
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.