Forum: Mikrocontroller und Digitale Elektronik Branches und absolute Sprünge durch kürzere erssetzen


von Jochen Adler (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Du willst aber jetzt nicht erzählen, das du ein 17k großes 
Assemblerprogramm geschrieben hast, ohne die Assemblerbefehle zu kennen?

MfG Spess

von Jochen Adler (Gast)


Lesenswert?

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

von Sascha W. (sascha-w)


Lesenswert?

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

von Jochen Adler (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.