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