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:
Bascom nutzt leider die Fähigkeiten der RISC-CPU mit den 32 Registern nicht aus (und kennt auch kein RJMP).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







Zitieren

Lesezeichen