Unterschied zwischen AVR Studio Assembler und gcc-as?

OP (Firma: Embedit Mikrocontrollertechnik) #1784122
Lesenswert?

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
#1784162
Lesenswert?

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.
#1784179
Lesenswert?

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.
OP (Firma: Embedit Mikrocontrollertechnik) #1784253
Lesenswert?

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
...
(Firma: Schweigstill IT) Persönliche Seite #1784263
Lesenswert?

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.
#1784273
Lesenswert?

„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.
OP (Firma: Embedit Mikrocontrollertechnik) #1784294
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren