www.mikrocontroller.net

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


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jochen Adler (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Jochen Adler (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Sascha Weber (sascha-w)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Jochen Adler (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net