www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler und .IF und .ELSE


Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer von euch kann mit dem Atmel Assembler Studio4 und den neuen
directiven arbeiten?
Ich suche Code-Beispiele mit .IF und .ELSE.
Kann ich diese Direktiven so einsetzen wie in Basic?
Aus den Hilfen von Atmel werde ich nicht schlau. Einige Beispiele wären
hilfreich.
Vielen Dank

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.if, .ifdef etc. sind Compiler-Direktiven, werden also zu Compilierzeit
ausgewertet. Du kannst damit also nichts zur Laufzeit auswerten, sowas
wie

if (PINA = 0) then ....

ist also nicht möglich, da dies ja erst beim Ausführen (Runtime)
entscheidbar ist.

Das ganze nennt sich also bedingte Compilierung. Du kannst z.B. damit
leicht ganze Codeabschnitte auskommentieren oder bestimmte
Codevarianten leicht testen und umschalten:

.equ Variante = 1

[...]

.IF Variante == 1
 [Code für Variante1...]
.ELIF Variante == 2
 [Code für Variante2...]
.ELIF Variante == 3
 [Code für Variante3...]
.ENDIF


Stell dir jetzt vor, du möchtest jetzt doch eine andere Variante
testen. Statt umständlich den Code umzubasteln und auszukommentieren
setzt du oben bei .equ einfach den Wert anders und der Assembler
kompiliert dir was anderes herein. Der Code der anderen Varianten ist
dann nachher überhaupt nicht mit im Hex-file, ist also so, als wäre es
auskommentiert.
In Verbindung mit Macro's lässt sich das auch schön einsetzen. Hier
mal ein Beispiel:

Example:
.MACRO SWAPMEM
.IF @4 == 1
        push @2
        push @3
.ENDIF
        ld @2, @0
        ld @3, @1
        st @0, @3
        st @1, @2
.IF @4 == 1
        pop @3
        pop @2
.ENDIF
.ENDMACRO

.CSEG
        SWAPMEM R1, R2, R16, R17, 1

Hier wird der Inhalt der Speicherzellen vertauscht, auf die die
Register R1 und R2 zeigen. Wenn man das öfter im Code macht, kann man
für sowas mal ein Macro schreiben. Das Beispielmakro braucht 2
Hilfsregister, die als dritter bzw. vierter Parameter übergeben werden.
Als 5ter Parameter soll eine 1 stehen, wenn der Inhalt der Hilfsregister
durch den Macro-"Aufruf" nicht verändert werden soll.
Der Assembler prüft also zur Kompilierzeit ob die Register gesichert
werden sollen und führt entsprechende PUSHs und POPs aus.
Somit hält man den Code übersichtlich.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.