Hallo,
ich hab mal was in Assembler zusammengetackert und komme mit dem Syntax
noch nicht wirklich gut zurecht.
;I/O ports
ldi temp, 0xFF
out LEDSegmentPort-1, temp ;DDRx
.if ( LEDCommonInvert )
ldi temp, 1<<LEDOuterLeft | 1<<LEDInnerLeft | 1<<LEDInnerRight |
1<<LEDOuterRight
.elif
ldi temp, 0x00
.endif
out LEDCommonPort-1, temp ;DDRx
Als Fehler kommt:
error: syntax error, unexpected '\n'
und zeigt auf die Zeile .elif
Was mache ich falsch und wieso?
Anfänger schrieb: > Was mache ich falsch und wieso? du hast nicht gesagt was du für einem assembler nutzt. Sieht mir zwar ein wenig nach Atmel aus aber dort gibt es kein .if (zumindest kenn ich es dort nicht)
Bei .elif sollte noch eine Bindingung folgen, du wolltest wohl .else schreiben
Hallo, es ist der AVR Assembler und ich will für einen ATtiny3213 schreiben. die Anwiesungen habe ich im Netz gefunden: Assemblerdirektiven .BYTE x : reserviert x Bytes im Datensegment (siehe auch .DSEG) .CSEG : compiliert in das Code-Segment .DB x,y,z : Byte(s), Zeichen oder Zeichenketten einfügen (in .CSEG, .ESEG) .DEF x=y : dem Symbol x ein Register y zuweisen .DEVICE x : die Syntax-Prüfung für den AVR-Typ x durchführen (inHeaderdatei enthalten) .DSEG : Datensegment, nur Marken und .BYTE zulässig .DW x,y,z : Datenworte einfügen (.CSEG, .ESEG) .ELIF x : .ELSE mit zusätzlicher Bedingung x .ELSE : Alternativcode, wenn .IF nicht zutreffend war .ENDIF : schließt .IF bzw. .ELSE ab .EQU x=y : dem Symbol x einen festen Wert y zuweisen .ERROR x : erzwungener Fehler mit Fehlertext x .ESEG : compiliert in das EEPROM-Segment .EXIT : Beendet die Compilation .IF x : compiliert den folgenden Code, wenn Bedingung x erfüllt ist .IFDEF x : compiliert den Code, wenn Variable x definiert ist .IFNDEF x : compiliert den Code, wenn Variable x undefiniert ist .INCLUDE x : fügt Datei "Name/Pfad" x in den Quellcode ein .MESSAGE x : gibt die Meldung x aus .LIST : Schaltet die Ausgabe der List-Datei ein .LISTMAC : Schaltet die vollständige Ausgabe von Makrocode ein .MACRO x : Definition des Makros mit dem Namen x .ENDMACRO : Beendet die Makrodefinition (siehe auch .ENDM) .ENDM : Beendet die Makrodefinition (siehe auch .ENMACRO) .NOLIST : Schaltet die Ausgabe der List-Datei aus .ORG x : Setzt den CSEG-/ESEG-/DSEG-Zähler auf den Wert x .SET x=y : Dem Symbol x wird ein variabler Wert y zugewiesen
Hi >du hast nicht gesagt was du für einem assembler nutzt. Sieht mir zwar >ein wenig nach Atmel aus aber dort gibt es kein .if (zumindest kenn ich >es dort nicht) Du würdest dich wundern, was der/die AVR-Assembler alles können. Auch .if. .elif verlangt eine Bedingung: Syntax: .ELIF<expression> Für eine Alternative musst du .else benutzen. MfDG Spess
Anfänger schrieb: > es ist der AVR Assembler und ich will für einen ATtiny3213 schreiben. eher 2313 > die Anwiesungen habe ich im Netz gefunden: > > Assemblerdirektiven Das sind eher Preprocessor-Direktiven Assember selbst ist mov, ldi, in, brne, rjmp... Kann ich trotzdem nicht. elif heißt else if und bei if sollte eine Bedingung hin
>alles und weil du null Ahnung hast.
Liebe Admins,
warum ist eigentlich posten ohne Anmeldung erlaubt? Wäre schön wenn man
einem solchen unterbelichteten Burschen wie der der og. Zeile schrieb
einfach den Zugang verweigert.
> warum ist eigentlich posten ohne Anmeldung erlaubt?
das sehe ich auch so. ein anmeldung sollte notwendig sein.
das forum leidet durch solche zwischenrufer nur. was es dem einen durch
unkompliziertes antworten - weil keine anmeldung notwendig - erleichtern
sollte, vermiest durch solche meldungen 10 andere, hier wieder vorbei zu
schauen.
gruss
hans
Lasst uns mal nen neuen Fred aufmachen und das ausführlich diskutieren.
Hi
>warum ist eigentlich posten ohne Anmeldung erlaubt?
Das Forum lebt davon. Die reglemenierten Foren sind einfach nur öde.
MfG Spess
Samuel K. schrieb: >> Assemblerdirektiven > Das sind eher Preprocessor-Direktiven Man nennt diese Anweisungen in der Tat Assembler Direktiven, z.B. siehe: http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops Auch wenn einige der Direktiven durch eine Art Präprozessor implementiert werden könnten, so habe andere Seiteneffekte, die nicht z.B. Textersetzung realisiert werden können. So z.B. können Symbole definiert oder mit Attributen versehen werden. Oder es werden Daten-Bytes oder -Worte in ein Segment geschrieben.
spess53 schrieb: > Das Forum lebt davon. Die reglemenierten Foren sind einfach nur öde. > > MfG Spess Du bist ein Musterbeispiel dafür, wie der Umgang mit der freien Postfunktion sein sollte. Leider sieht man ständig, wie sich Leute extrem daneben benehmen und die sind zum großen Teil nicht angemeldet. Deshalb bin ich eindeutig dafür das dicht zu machen. Damit könnte man, denke ich, außerdem die mittlere Qualität der Beiträge erhöhen. Gruß Skriptkiddy
Bin auch blutiger Anfänger, habe aber ein Paar Ideen: 1. Wie weiter oben schon geschrieben, hinter .ELIF fehlt die Bedingung. Daher kommt die neue Zeile ( /n ) unerwartet. http://de.wikipedia.org/wiki/Escape-Sequenz 2. Die ".XXX" "Befehle sind nur für den Compiler. Diese Befehle versteht der Controller nicht. Sie werden jedoch während des Compilierens ausgewertet. Diese werden nicht in Programmcode umgesetzt, sondern bestimmen nur was wie compilliert wird. Eine Abfrage ;Zuweisung am Programmanfang .EQU Wert = 8 ; Taktfrequenz 8MHz ;Verzögerung .IF Wert = 8 Routine für Warte 100 Takte .ELIF Wert = 16 Routine für Warte 200 Takte .ENDIF ;Pause vorbei Routine für Jetzt wird wieder in die Hände gespuckt bewirkt KEINE Abfrage im fertigen Programm. Beim Compilieren wird die Variable "Wert" abgefragt und dann NUR der Programmteil übersetzt, der die Bedingung erfüllt. Im obrigen Bsp. weist Du "Wert" die Taktfrequenz des Prozessors zu. Damit kann der Quellcode entweder für einen Prozessor mit 8MHz oder 16MHz Quarz übersetzt werden. Die (sehr kurze) Verzögerung bleibt damit bei beiden Versionen zeilich gleich - vorausgesetzt die angegebene Taktfrequenz stimmt mit der tatsächlichen überein, das kann der Compiler nicht erkennen, diese Vorgabe kommt von Dir. Der positive Nebeneffekt ist, es werden ein paar Byte im Flash gespart. Die Assemblercodes die der Controller versteht findest du im dazugehörigen Datenblatt (Nicht jeder Controller innerhalb einer Familie hat die gleichen Befehle)
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.