Kleine Programme, die sehr dicht an den I/O-Registern hängen, dürften
beim ARM tendenziell deutlich grösser ausfallen. Allein schon aufgrund
der häufigen 32bit-Adressen der I/O-Register, gegenüber vielen
6-Bit-Adressen beim AVR. Die grössere Wortbreite bringt da nur selten
einen Vorteil.
Und der ARM will initialisiert werden. Einiges davon wird beim AVR
schon durch Fuses festgelegt, z.B. die Taktung, beim ARM durch Programm
(wer mal beim M32c reingeschmeckt hat, der kennt das schon). Allein der
Startup- und Verwaltungskram für Taktung, Speichersteuerung, Thumb-Mode
Interrupt Dispatch usw, kann durchaus auf 500-1000 Bytes kommen.
Wer also partout einen 2K-Tiny2313 durch einen ARM ersetzen will, der
wird kaum unter 8K glücklich werden.
Anders dürfte es aussehen, wenn man ein 50-100KB AVR-Programm portiert.
In dem der meiste Code nicht direkt I/O nutzt, sondern wenige
I/O-Routinen nutzt. Und man erhebliche Mengen Daten im ROM hat - die
sich beim AVR nur umständlich verwenden lassen (erst recht beim GCC).
Da wäre ich nicht erstaunt, wenn der Grössenunterschied bei Thumb-Code
eher gering ausfällt.