Hallo, ich beschäftige mich mit dem Tutorial zu Bootloadern hier auf dieser Seite und versuche mich gerade am Hallo-Welt-Bootloader. Ich verwende einen Atmega 168-20PU extal 20 Mhz. Ich habe die Fuses so programmiert: -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m -U efuse:w:0xf8:m Ich würde nun vermuten, dass die MCU nun nicht mehr versucht von Adresse 0 zu starten sondern von einer höheren. Dennoch wenn ich ein Programm normal kompiliere und linke wird es gestartet. Weshalb kann das so sein? Vielen Dank für jede Hilfe!
Hallo, die Fuse Bits sind dafür da, dass dein Programm getrennt vom Bootloader geflasht werden kann ohne den gesamten Flash löschen zu müssen. Dein neues Programm muss also ab der Adresse gelinkt werden, wie du den Bootloader / Fuse Bits eingestellt hast. Der Bootloader braucht irgendeine Bedingung um im Bootloader zu bleiben oder dein Programm zu starten (zum Beispiel ein gesetzter I/O Pin) und wenn die Bedingung zu trifft wird dein Hauptprogramm oder gestartet oder der Bootloader bleibt in deinem eigenen Programm. Als erstes musst du dann den Bootloader flashen und kannst danach dein Hauptprogramm über den Bootloader flashen. Jens
Bertine Maxe schrieb: > Ich verwende einen Atmega 168-20PU extal 20 Mhz. > Ich habe die Fuses so programmiert: > -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m -U efuse:w:0xf8:m Ich überprüfe das jetzt nicht, sondern glaube dir einfach, daß du den AVR damit dazu gebracht hast, bei einer höheren Adresse als 0x0000 zu starten. Für die Zukunft: drösele die Fusebytes auf die einzelnen Fuses auf, die du gesetzt haben willst. > Ich würde nun vermuten, dass die MCU nun nicht mehr versucht von Adresse > 0 zu starten sondern von einer höheren. Dennoch wenn ich ein Programm > normal kompiliere und linke wird es gestartet. Ich nehme an, du meinst damit, daß du noch keinen Bootloader geflasht hast, sondern statt dessen per ISP den gesamten Flash gelöscht und dann eine Anwendung ab 0x0000 in den Flash geschrieben hast. Korrekt? > Weshalb kann das so sein? Der gelöschte Flash enthält 0xFF in jeder Zelle, was den Opcode 0xFFFF ergibt. Der AVR behandelt den praktisch [1] wie ein NOP. Unter Annahme, daß der Booloader-Bereich im Flash komplett leer ist, läuft der AVR also durch alle diese NOPs hindurch, bis der Adreßzähler überläuft und zu 0 springt. Und dort findet und startet er dein Programm. [1] http://www.avrfreaks.net/forum/what-opcode-0xffff
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.