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).
Lesezeichen