Hallo, ich grübel gerade darüber nach, warum der avr-asm folgenden Code nicht übersetzen kann, obwohl die Befehle in jeder Assemblerreferenz aufgelistet sind. Würde mich freuen, wenn mir jemand mal einen Hint geben könnte, was hier falsch läuft. Danke! ;***** Specify Device .device AT90S1200 ;***** I/O Register Definitions .equ SREG =$3f .equ GIMSK =$3b .equ TIMSK =$39 Das sagt mir der Assembler dazu: avr-gcc -mmcu=at90s1200 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=avr910.s -std=gnu99 -Wp,-M,-MP,-MT,avr910.o,-MF,.dep/avr910.elf.d avr910.s --output avr910.elf -Wl,-Map=avr910.map,--cref -lm 1200def.inc: Assembler messages: 1200def.inc:38: Error: unknown pseudo-op: `.device' 1200def.inc:41: Error: expected comma after "SREG" 1200def.inc:41: Warning: rest of line ignored; first ignored character is `=' 1200def.inc:41: Warning: rest of line ignored; first ignored character is `3' 1200def.inc:42: Error: expected comma after "GIMSK" 1200def.inc:42: Warning: rest of line ignored; first ignored character is `=' 1200def.inc:42: Warning: rest of line ignored; first ignored character is `3' 1200def.inc:43: Error: expected comma after "TIMSK" 1200def.inc:43: Warning: rest of line ignored; first ignored character is `=' 1200def.inc:43: Warning: rest of line ignored; first ignored character is `3' 1200def.inc:44: Error: expected comma after "TIFR" 1200def.inc:44: Warning: rest of line ignored; first ignored character is `=' 1200def.inc:44: Warning: rest of line ignored; first ignored character is `3' 1200def.inc:45: Error: expected comma after "MCUCR" 1200def.inc:45: Warning: rest of line ignored; first ignored character is `=' 1200def.inc:45: Warning: rest of line ignored; first ignored character is `3'
In jeder Befehlsreferenz eben nicht, sondern nur in der des Atmel-Assemblers. Der gas (GNU assembler) hat eine andere Pseudobefehlssyntax (nämlich eine Unix-typische). Die hat er übrigens völlig unabhängig vom Prozessor, also auch unter Unix/i386 sieht ein Assemblerprogramm um einiges anders aus als z. B. unter DOS/Windows. Die AVR-Befehle selbst sind dabei allerdings gleich.
Hallo Jörg, Danke ich begebe mich dann mal auf die Suche nach den Präprozessordirektiven. Ich hab bisher Assembler nur im Zusammenhang mit Atmel und 8085er gesehen. Danke Marcus
Vorsicht, Präprozessor ist was anderes als Pseudo-Ops. In der Tat läßt man beim GCC in der Regel auch die Assemblerfiles durch den Präprozessor laufen. Damit werden dann Dinge wie #include <avr/io.h>, #define usw. abgehandelt. Der standardmäßige Suffix für Assemblerfiles, die durch den Präprozessor gehen sollen, ist .S (ein großes S). Assembliert werden sie dann durch Aufruf des Compilers (! -- nicht des Assemblers). Die Pseudo-Ops sind bei der GNU Assembler Doku (Info-Files, TkInfo benutzen) beschrieben. Leider sind die AVR-spezifischen Operatoren (insbesondere lo8 und hi8) nirgends dokumentiert worden. :-(
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.