Warum funktioniert avr-as nicht?

Ich habe das folgende Programm in AVR-Assembly:

.DEF    WR = R16

.ORG 0

SER    WR
OUT    0x24, WR

Wenn ich aufrufe avr-as beeep.s, wo beeep.s den vorherigen Code enthält, bekomme ich eine Fehlermeldung:

beeep.s: Assembler messages:
beeep.s:1: Error: unknown pseudo-op: `.def'
beeep.s:5: Error: constant value required
beeep.s:5: Error: register number above 15 required
beeep.s:6: Error: constant value required

Ich kann die Ursache meines Fehlers nicht finden... Was habe ich falsch gemacht?

Es sieht so aus, als ob Sie versuchen, den Code zu kompilieren, der avrasmmit GNU geschrieben wurde as, die anscheinend andere Anweisungen haben (die keine Maschinenanweisungen, sondern "Pseudo-Ops" sind).
@EugenSch. Welche Anleitung sollte ich also verwenden? Oder welcher Assembler?
Schau mal hier . Oder verwenden Sie einfach den Assembler von Atmel.
@EugenSch. Ist aber .devin dieser Anleitung eingestellt, und die gleiche Fehlermeldung kommt wenn ich .DEVdurch ersetze .dev...
Ja, aber Bedeutung und Verwendung sind völlig unterschiedlich.
@EugenSch. Und welcher Assembler unterstützt die von mir verwendete Syntax?
Diese hier denke ich..
@EugenSch. Aber es scheint, dass dieser Assembler nur unter Windows verfügbar ist, gibt es einen gleichwertigen Assembler, der unter Linux verfügbar ist?
Es sieht so aus, als wären es nur Fenster. In diesem Fall müssen Sie es zu GNU Assembler migrieren.
@EugenSch. Danke, Sie können Ihre Antwort posten, ich werde sie als die gute markieren!

Antworten (2)

Ändern .DEFmit .EQU:

.EQU    WR, R16

.ORG 0

SER    WR
OUT    0x24, WR

Wie auf http://www.nongnu.org/avr-libc/user-manual/assembler.html beschrieben , sollte man NICHT avr-as direkt verwenden, sondern stattdessen avr-gcc verwenden.

Beispiel: avr-gcc -mmcu=atmega8 -x assembler-with-cpp example.s

Siehe Hinweis [2] des Beispielprogramms auf der Seite, um zu sehen, wie man dem Register einen symbolischen Namen zuweist.