Forum: Mikrocontroller und Digitale Elektronik Unterschied zwischen AVR Studio Assembler und gcc-as?


von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


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

von Hc Z. (mizch)


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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

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

von Hc Z. (mizch)


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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Was sind das denn für zusätzliche Features? Nur die Verbindung zu C?

von Hc Z. (mizch)


Lesenswert?

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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


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
...

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Ok, gehört für mich zusammen.

von Hc Z. (mizch)


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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


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

von Hc Z. (mizch)


Lesenswert?

Ja, das ist schon schade.

von avra watcher (Gast)


Lesenswert?

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.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

avra watcher schrieb:
> stimmt so ganz nicht, avra wird auf Sourceforge gerade wiederbelebt.

cool, wusste ich gar nicht. Danke für den Hinweis

von Peter (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.