Forum: Mikrocontroller und Digitale Elektronik Unterschied M8, M88 und M168 aus sicht von gcc


von Christian U. (z0m3ie)


Lesenswert?

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.

von Christian U. (z0m3ie)


Lesenswert?

Sorry im falschen Forum gelandet

von Andreas K. (a-k)


Lesenswert?

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.

von Christian U. (z0m3ie)


Lesenswert?

Danke, das erklärt einiges

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.