Hallo, ich programmiere unter anderem für einen MEGA162, der 16384 Bytes Flash hat. Mein Programm ist aber inzwischen 17092 Bytes groß, es passt also nicht mehr ins FLASH. Es gibt auch keine pinkompatible DIP-Version mit mehr als 16kB FLASH. Also muss ich Speicherplatz sparen, z.B. indem ich jmp/call zu rjmp/rcall mache und breq label0 rjmp label1 label0: ... label1: zu brne l1 mache. Gibt es eine Möglichkeit herauszufinden welche jmp/call- bzw. breq l0 & rjmp l1-Befehle so kurz sind, dass man sie durch die kürzeren relativen ersetzen kann?
PC-Programm schreiben, welches das Assembler-Listing analysiert. Musst nur die Sprungbefehle im Listing finden und aus dem dargestellten Opcode und der Befehlsadresse die Distanz berechnen.
Zähl doch erst mal ob du überhaupt so viele Jumps hast, dass sich das lohnt? Sonst nen kleines Script schreiben und das .asm file parsen?! Hast du überhaupt in assembler geschrieben? Wenn du einen C-Compiler nutzt macht der das schon alles für dich, da wirst du nicht mehr viel derart simples optimieren können :P
Hi Du willst aber jetzt nicht erzählen, das du ein 17k großes Assemblerprogramm geschrieben hast, ohne die Assemblerbefehle zu kennen? MfG Spess
>PC-Programm schreiben, welches das Assembler-Listing analysiert. Musst >nur die Sprungbefehle im Listing finden und aus dem dargestellten Opcode >und der Befehlsadresse die Distanz berechnen. >Sonst nen kleines Script schreiben und das .asm file parsen?! Genau dies hatte ich mir gedacht. Es wäre halt schön, wenn jemand sowas bereits gemacht hat. Danke für die schnellen Antworten.
du könntest alle call durch rcall und alle jmp durch rjmp ersetzen lassen, mach jeder Editor. Beim erneuten übersetzen des Programms meckert der Assembler dann schon die Sprünge an die zu weit entfernt sind. Allerdings spielt auch die Anordnung/Reihenfolge von Unterprogrammen eine Rolle - wenn häufig vom Speicheranfang zum Ende und wieder zurück gesprungen werden muss sinkt das Optimierungspotential. Aber wie schon erwähnt - erst mal mit zählen der Befehe checken ob sichs überhaupt lohnen könnte. Sascha
Um mein MEGA162-Programm auf unter 16kB zu kürzen habe ich mal ein primitives QBasic-Programm geschrieben. Es zeigt Stellen an, wo der Quellcode eventuell gekürzt werden kann. Ich habe es mal angehängt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.