Laut Datenblatt kann der ATMega168 nur selbstprogrammierende Anweisungen ausführen, wenn Code aus dem Bootloader-Block ausgeführt wird.
Kann die Anwendung nach Abschluss des Bootloaders und dem Start der Anwendung in eine Unterroutine im Bootloader-Block zurückspringen und in den Flash schreiben?
Oder ist es der Fall, dass das Programm nach dem Verlassen des Bootblocks erst nach einem Reset wieder selbst programmiert werden darf?
avr
bootloader
Toby Jaffey
quelle
quelle
Antworten:
Nun ... Sie können jederzeit einen von der Software initiierten Reset ausführen, um den Watchdog-Timer auszunutzen ... und Daten in eeprom eingeben, um Ihrem Bootloader-Code mitzuteilen, was er tun soll ...
http://www.cs.mun.ca/~paul/cs4723/material/atmel/avr-libc-user-manual-1.6.5/FAQ.html#faq_softreset
Auf Seite 272 des ATMega168-Handbuchs (Abschnitt 6: Aufrufen des Bootloader-Programms) heißt es in der ersten Zeile:
Es scheint mir also, dass Sie die Bootloader-Funktionen definitiv über den Anwendungscode aufrufen können und müssen . Solange Sie Code ausführen, der sich im Speicherbereich des Bootloaders befindet, können SPM-Anweisungen ausgeführt werden. Daher sollten Sie in der Lage sein, sich jedes Mal selbst zu programmieren, wenn Ihr Anwendungsprogramm in den Bootloader-Code springt.
quelle
Sie können einfach zum Bootloader-Block springen und alles sollte in Ordnung sein. (Denken Sie daran, auch die Interrupt-Vektoren zu verschieben.)
quelle
Sie können in den Bootloader springen und mit der Neuprogrammierung des Anwendungsteils beginnen, aber das ist wahrscheinlich ein schlechtes Design. Überlegen Sie, was passiert, wenn ein Update fehlschlägt oder unterbrochen wird: Jetzt wird Ihr App-Bereich verworfen, und da die Hälfte Ihres Bootloaders tatsächlich dort lebt, wird er wahrscheinlich auch verworfen. Sie haben das Gerät also effektiv gemauert.
Sie möchten den Bootloader als eigenständiges Programm strukturieren.
Siehe diese FAQ:
http://www.avrfreaks.net/forum/faq-c-writing-bootloader-faq?name=PNphpBB2&file=viewtopic&t=79206
quelle