Hallo,
ich habe mir frisch OpenSuse als virtuelle Maschine installiert und über
die Paketverwaltung den Macro Assembler sowie den avrdude installiert.
Wenn ich meine .asm Datei mit
asl NameDerDatei
kompiliere, scheint keine einzige Zeile zu funktionieren.
Assembliere RAM.asm
PASS 1
> > >RAM.asm(3): Fehler: unbekannter Befehl> > >RAM.asm(4): Fehler: undefiniertes Attribut> > >RAM.asm(17): Fehler: unbekannter Befehl
und dann geht es immer so weiter. In der Schule benutzen wir jedoch die
gleichen Programme und da funktioniert alles. Hier der Anfang meines
Quelltextes:
1
CPU ATMEGA8
2
INCLUDE attiny2313.inc
3
4
NUMBER0: EQU 0x3F
5
NUMBER1: EQU 0x06
6
NUMBER2: EQU 0x5B
7
NUMBER3: EQU 0x4F
8
(...)
Ist jemand ein Linux Experte und kann mir sagen, was fehlt? Google hilft
leider gar nicht weiter. Muss ich irgendwie die Bibliotheken einbinden
und wenn ja, wie?
Um welchen Makro-Assembler geht es und was ist "asl"?
Ihr verwendet in der Schule auch Linux und avrdude?
NB: Das sieht etwas gewagt aus:
CPU ATMEGA8
INCLUDE attiny2313.inc
Bitverschieber schrieb:>> > >RAM.asm(3): Fehler: unbekannter Befehl
Nur ist die dritte Zeile des gezeigten Quellcodes eine Leerzeile. Ganz
sicher, dass das der richtige Quellcode ist?
Es geht um den Marco Assembler von Alfred Arnold und mit asl wird eine
Programmdatei erzeugt schätze ich? Jedenfalls muss ich sie nachher zu
einer Hex-Datei umformen und dann flashen.
In der Schule nutzen wir auch OpenSuse, den Marco Assembler und avrdude.
Wir arbeiten auch da mit dem Attiny2313.
Das CPU ATMEGA8 soll ein Workaround sein, aber genau erklären kann ich
das auch nicht mehr. Bin auch kein wirklicher Experte in diesem Gebiet,
aber es funktioniert.
Ich habe den Kommentar und eine Leerzeile danach aus dem Code hier
entfernt, deswegen müssten die Zeilennummern nach dem asl-Befehl
eigentlich um zwei reduziert werden. Normalerweise fängt mein Code also
mit einem Kommentar an, den ich hier weggelassen habe.
Du erwischst möglicherweise den falschen Assembler. Gleicher Name im
Pfad beispielsweise. So steht "as" in Linux für den System-Assembler und
wenn "asl" den an Stelle von Arnold erwischt, dann kommt sowas raus.
Bitverschieber schrieb:> Marco Assembler
Der hat nichts mit irgendeinem „Marco“ zu tun, sondern etwas mit
Makros : Anweisungen zur Textersetzung, um sich gelegentlich
Schreibaufwand zu sparen.
Ansonsten gibt es bei den Assemblern halt viele verschiedene
Variationen, was die Angabe der so genannten Pseudo-Befehle betrifft.
Nicht nur, dass sie zuweilen verschieden heißen (.db vs. .byte oder
sowas), sondern auch solche Dinge, wie ob vor dem „EQU“ ein
Gleichheitszeichen, ein Doppelpunkt oder gar nichts stehen muss,
sind da manchmal verschieden.
Daher wäre es wichtig, welche konkrete Assemblersyntax dein Quellcode
benutzt (und ggf. woher du ihn hast) und was dein Assembler eigentlich
haben will.
Ist „asl“ als Assembler gesetzt, oder darf es auch ein anderer sein?
Bitverschieber schrieb:> Hallo,>> ich habe mir frisch OpenSuse als virtuelle Maschine installiert und über> die Paketverwaltung den Macro Assembler sowie den avrdude installiert.>> Wenn ich meine .asm Datei mit>> asl NameDerDatei>> kompiliere, scheint keine einzige Zeile zu funktionieren.>> Assembliere RAM.asm> PASS 1>> > >RAM.asm(3): Fehler: unbekannter Befehl>> > >RAM.asm(4): Fehler: undefiniertes Attribut>> > >RAM.asm(17): Fehler: unbekannter Befehl>> und dann geht es immer so weiter. In der Schule benutzen wir jedoch die> gleichen Programme und da funktioniert alles. Hier der Anfang meines> Quelltextes:>>
1
> CPU ATMEGA8
2
> INCLUDE attiny2313.inc
3
>
4
> NUMBER0: EQU 0x3F
5
> NUMBER1: EQU 0x06
6
> NUMBER2: EQU 0x5B
7
> NUMBER3: EQU 0x4F
8
> (...)
9
>
>> Ist jemand ein Linux Experte und kann mir sagen, was fehlt? Google hilft> leider gar nicht weiter. Muss ich irgendwie die Bibliotheken einbinden> und wenn ja, wie?
Ich glaube nicht, daß es dafür einen Linux-Experten braucht. Jemand, der
das Handbuch lesen kann, ist m.E. völlig ausreichend.
In dem steht nämlich, daß der Assembler im AVR-Modus Hex-Konstanten
nicht im C-, sondern nur im Intel-Format erlaubt (d.h. mit einem
nachgestellten 'h').
Das Verhalten läßt sich mit RELAXED ON abstellen.
Markus F. schrieb:> Ich glaube nicht, daß es dafür einen Linux-Experten braucht. Jemand, der> das Handbuch lesen kann, ist m.E. völlig ausreichend.>> In dem steht nämlich, daß der Assembler im AVR-Modus Hex-Konstanten> nicht im C-, sondern nur im Intel-Format erlaubt (d.h. mit einem> nachgestellten 'h').
In dem, das ich gerade aufgeschlagen habe (Version 1.42), sagt die
Tabelle 2.10, dass für Atmel der C-Modus benutzt wird. In diesem Modus
sind Konstanten wie 0x3F (hex), 077 (oktal) und 0b00111111 (binär)
legal.
Im Handbuch steht aber noch mehr, z.B. in Abschnitt 2.5:
1
Der Doppelpunkt nach dem Label ist optional, falls das Label in der
2
ersten Spalte beginnt (woraus folgt, daß der Befehl niemals in Spalte 1
3
beginnen darf).
Lass also einfach mal die Zeilen mit CPU und INCLUDE nicht in Spalte 1
beginnen, indem du ein oder mehrere Leerzeichen voranstellst. Das gilt
natürlich auch für alle weiteren Zeilen, die kein Label enthalten.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.