Hi, ich möchte unter Linux Assembler auf dem AVR programmieren. Leider gibt es nur einen Assembler, der auch aktuelle AVR unterstützt, und das ist der gcc-as. Zwischen dem gcc-as und dem AVR Studio bzw den Assembler von Atmel gibt es aber wohl einige Unterschiede in der Syntax. Gibt es irgendwo einen Vergleich? Hier auf der Seite hab ich nur einen Forenbeitrag gefunden. Darin ging es lediglich um die Doppelregister Eignet sich der gcc-as überhaupt dazu, reines Assembler zu programmieren oder sollte man einfach den AVR Assembler mit Wine verwenden? PS: Ich hab eine ähnliche Frage schon in meinem Forum gestellt. http://www.elektronik-projekt.de/thread.php?threadid=6404
Du kannst mit avr-as gut arbeiten. Beachte aber, dass avrasm2 (der originale Atmel-Assembler) auch unter Linux (mit wine) läuft. Die ganzen Assembler-Direktiven sind bei avr-as anders. Es hätte wenig Sinn, die denen des avrasm2 gegenüber zu stellen, Du musst sie einfach neu lernen. Auch ist das ganze Handling anders, da avr-as Code erzeugt, der noch gelinkt werden muss. Um das in einem Rutsch zu machen, nimmst Du am Besten avr-gcc als Frontend. Bekommt der als Source ein .S, weiß der schon, was zu machen ist. Es ist ein Ein-Pass-Assembler, und seine Fehlermeldungen sind nicht immer erhellend. Seine Stärken spielt er vor allem in der Kombination mit gcc-C-Code aus. Für eine von C aufrufbare Function müssen z.B. nur die Übergabekonventionen beachtet werden und das Einsprunglabel als global definiert werden, Du kannst dieselben globalen Variablen verwenden, egal wo sie definiert sind, usw. Der Unterschied, über den man am schnellsten stolpert, ist, dass avr-as in seinen Symbolen keinen I/O-Bereich kennt, die Register dort sind mit Ramadressen (also unterste Adresse 0x20) einheitlich angegeben. Um beispielsweise nach Port B mit einem I/O-Befehl (in, out, sbis, sbic, ...) zu schreiben, muss es
1 | out _SFR_IO_ADDR(PORTB),r24 |
heißen. Oder Du setzt am Beginn des Assembler-Source
1 | #define __SFR_OFFSET 0 /* we handle different I/O addresses without macros */ |
rein. Dann darfst Du für Register im I/O-Bereich kein lds/sts verwenden (vermutlich eine leichte Übung), aber in/out/... ohne Macro.
Klingt so, als würde es sich nicht lohnen, sich mit dem gcc-as rumzuschlagen. Schade, dass es kein aktuelles Equivalent zum avrasm2 unter Linux gibt
Ich verwende avr-as gerne und häufig wegen seiner zusätzlichen Features, aber zum Einlernen in Assembler ist er sicher nicht besonders geeignet. Da avrasm2 unter Linux läuft, wird sich vermutlich keiner so schnell die Mühe machen, ein natives Duplikat davon zu bauen. Es gibt ja keinen Leidensdruck, es tut ja. Und wer mehr braucht, nimmt avr-as.
Was sind das denn für zusätzliche Features? Nur die Verbindung zu C?
Auf Linux einfach „info gas“ tippen und sich überlegen, was davon der avrasm2 bieten würde. Vorlesen tue ich es jetzt aus hoffentlich nachvollziehbaren Gründen nicht. Ob Du es brauchst, musst Du entscheiden.
Da steht irgendwie alles mögliche. Das meiste davon kann ich irgendwie nicht mit dem avr-as in Verbindung bringen, außer dass ich natürlich auch mit Nano die Files editieren kann und mit screen dies auch unterbrechungsfrei via SSH usw. Meintest du das mit den zusätzlichen Features? Allerdings frage ich mich dann, was ich mit GRUB oder vcd-info soll. Oder bekommst du da eine andere Ausgabe?
1 | File: dir, Node: Top Dies ist der Beginn des INFO-Baums |
2 | |
3 | Dieser Verzeichnis-Knoten zeigt ein Menü aller Hauptpunkte an. |
4 | „q“ beendet Info, „?“ listet alle Info-Befehle auf, „d“ kehrt hierher |
5 | zurück, „h“ gibt eine Einsteiger-Hilfe, „mEmacs<Return>“ besucht das |
6 | Emacs-Manual, etc. |
7 | |
8 | Im Emacs kann man mit dem zweiten Mausknopf auf einen Menüeintrag oder |
9 | einen Querverweis klicken, um einen solchen auswählen. |
10 | |
11 | * Menu: |
12 | |
13 | Archiving |
14 | * Cpio: (cpio). Copy-in-copy-out archiver to tape or disk. |
15 | |
16 | AVR Programming & development tools. |
17 | * Simulavr: (simulavr). A simulator for Atmel AVR microcontrollers. |
18 | |
19 | ... |
Markus Burrer schrieb: > Hi, ich möchte unter Linux Assembler auf dem AVR programmieren. Leider > gibt es nur einen Assembler, der auch aktuelle AVR unterstützt, und das > ist der gcc-as. Es gibt keinen gcc-as. Der gebräuchlichste Assembler unter Linux ist GAS. Er gehört NICHT zum GCC-Paket, sondern zum Paket Binutils. Da jedoch bei der Erzeugung einer Toolchain tunlichst GCC und Binutils gemeinsam kompiliert werden sollten, ist der doch fundamentale Unterschied nicht offensichtlich. Ebenso kann man das GCC-Frontend gcc auch zum Aufruf von gas verwenden.
„info gas” funktioniert natürlich nur, wenn Du die Info-files installiert hast. Du hast sie offensichtlich noch nicht benötigt. Bei den meisten Distributionen werden die in einem Paket enthalten sein, das „binutils” und „doc“ oder „info“ im Namen hat. Die Installation lohnt sich eigentlich immer schon dann, wenn man kompliziertere Aufgaben für avr-gcc hat, die mit der Standardeinstellung der Toolchain nicht zu erledigen sind. Ich habe aber nicht vor, in eine Diskussion „mein Assembler ist besser“ einzusteigen. Er ist es nicht -- jedenfalls nicht für jedermann. Ich will Dir den avrasm2 also keinesfalls ausreden. Für meine Arbeit (Modularisierung, Libraries, sections, symbolisches Debuggen in den Modulen mit avr-gdb) brauche ich den avr-as und möchte ihn nicht missen. YMMV.
Hc Zimmerer schrieb: > Ich habe aber nicht vor, in eine Diskussion „mein Assembler ist besser“ > einzusteigen. Er ist es nicht -- jedenfalls nicht für jedermann. Ich > will Dir den avrasm2 also keinesfalls ausreden. Ich will auch gar keine Diskussion "meiner ist größer als deiner". Ehrlich gesagt musst du mir den avrasm auch gar nicht ausreden. Ich bin eher etwas frustriert, dass man auf Wine zurückgreifen muss, weil es kein natives Equivalent gibt bzw das einzige Projekt in der Richtung eingeschlafen ist
Markus Burrer schrieb: > Ich bin > eher etwas frustriert, dass man auf Wine zurückgreifen muss, weil es > kein natives Equivalent gibt bzw das einzige Projekt in der Richtung > eingeschlafen ist stimmt so ganz nicht, avra wird auf Sourceforge gerade wiederbelebt.
avra watcher schrieb: > stimmt so ganz nicht, avra wird auf Sourceforge gerade wiederbelebt. cool, wusste ich gar nicht. Danke für den Hinweis
> stimmt so ganz nicht, avra wird auf Sourceforge gerade wiederbelebt.
und ist auch schon wieder eingeschlafen.
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.