gute Idee, aber ich vergaß Rechenoperationen mit Arrays und und und...

Ich sitze gerade daran, den Butterfly-AVR-Sample-Code von GCC nach Bascom zu übertragen. Schon der C-Code belegt 98% des ROM. Deshalb muss ich jeden Bascom-Schritt im Assembler-Code nachprüfen.
Ich kann ein Lied darüber singen, an welchen Stellen Bascom hemmungslos ROM frisst...
Das Hauptproblem ist das völlige Fehlen der Nutzung von Registern als Zwischenspeicher. Jede Variable wird beim nächsten mal wieder aus dem RAM nachgeladen. Und wenn es ein Array-Wert ist, dann steigt der Aufwand zusätzlich.
Tja und wenn man jetzt denkt, mit internen Variablen wie _temp1 (R24) und _temp2 (R25) könnte man den Compiler austricksen, der irrt...

hier ein Beispiel für _b2 = R21, indem Bascom sogar sein Register R21 nachlädt - na wenn das nicht konsequent ist:
Code:
  _b2 = 12
0042:   E05C        LDI     R21,0x0C         Load immediate

  If _b2 >= 10 Then Incr _b2
0043:   27BB        CLR     R27              Clear Register
0044:   E1A5        LDI     R26,0x15         Load immediate
0045:   910C        LD      R16,X            Load indirect Register R21 -> R16
0046:   E04A        LDI     R20,0x0A         Load immediate
0047:   1704        CP      R16,R20          Compare
0048:   F410        BRCC    PC+0x03          Branch if carry cleared
0049:   940C004C    JMP     0x0000004C       Jump
004B:   9553        INC     R21              Increment
Bascom nutzt leider die Fähigkeiten der RISC-CPU mit den 32 Registern nicht aus (und kennt auch kein RJMP).