Hallo hab gerad das problem das mein Bootloader schön in einen m8 passt im m88 gehts auch noch und beim m168 werden plötzlich fast 200 byte mehr erzeugt ?! Nun frag ich mich wozu ? m88 und 168 sollten doch eigentlich von der Codeerzeugung her gleich sein oder ? und der Unterschied zum m8 sollte auch nicht wahnsinnig sein.
Beim Mega8 liegen alle I/O-Ports im Bereich 00-3F, sind also mit den 1-Wort IN/OUT Befehlen adressierbar. Bei den MegaX8 liegen sie im Bereich 00-FF und müssen oft mit den 2-Wort-Befehlen LDS/STS adressiert werden. Und beim Mega168 sind auch die Calls 1 Wort länger, weil der 1-Wort Befehl RCALL nur bis 8K funktioniert.
Christian Ulrich wrote: > Hallo > > hab gerad das problem das mein Bootloader schön in einen m8 passt im m88 > gehts auch noch und beim m168 werden plötzlich fast 200 byte mehr > erzeugt ?! Das liegt daran, daß Du in C programmierst. Der Compiler nimmt dann für jeden Call/Jump 4-Byte Befehle. Auch für die Interruptvektoren (auch wenn man gar keine Interrupts braucht). In Assembler kann man natürlich RJMP/RCALL benutzen, da der Bootloader wohl nicht größer 4kB ist. In Assembler ist der Bootloader dann nur 2 Bytes größer (für den JMP 0x0000). Z.B. mein Bootloader: Mega88: 458 Byte Mega168: 460 Byte Peter
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.