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