Hmmm.... OK, der Bootloader ist weg, aber die Fuses haben doch noch immer die Einstiegsadresse vom Bootloader. Und die liegt doch im oberen Speicherbereich.
Wie startet dann der AVR nach einem Reset wieder mit dem Anwenderprogramm??
Ob Bootloader oder Start von 0x0000h wird doch durch das BOOTRST Fusebit gesteuert. Und wenn das nicht geändert wird, dann will doch der AVR wieder an der Startadrese des Bootloaders starten und da ist dann keiner mehr.
In der Praxis dürfte es aber trotz eigentlich falsch gesetzten BOOTRST Fuse oft funktionieren:
Wenn die BOOTRST Fuse programmiert ist, springt der Controller bei einem Reset an den Anfang des Bootloader-Bereichs (statt auf die Adresse 0). Dort enthalten bei einem fehlendem Bootloader bis zum Ende des Flashs alle Speicherzellen üblicherweise den Wert FF (hex) / 11111111 (bin). Immer vorausgesetzt, dass das eigentliche Programm nicht so groß ist, dass es schon in den Bootloader-Bereich hineinreicht.
Im gelöschten/noch nicht programmierten Flash-Speicher sind alle Bits auf 1 gesetzt!
FF FF ist für den Controller ein ungültiger Befehlscode, der nichts tut, aber auch nicht zur Exception oder zu ähnlichem führt. Nach dem "Nichtstun" wird der Program Counter erhöht und das nächste FF FF tut ebenfalls wieder nichts. Und irgendwann kommen wir am Ende des Adressbereichs an.
Und jetzt wird wieder alles gut! Der Program Counter wird beim Überlauf als nächstes auf Adresse 0 gesetzt und dort sollte in der Interrupt-Vektor-Tabelle hoffentlich der Sprungbefehl zum eigentlichen Beginn des Programms stehen, der sonst bei einem Reset direkt ausgeführt würde.
Aber die feine Art ist das auf keinen Fall!Gruß
Wolfgang