www.mikrocontroller.net

Forum: Compiler & IDEs Assembler mit avr-gcc


Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi, ich wollte mal bischen mit Assembler rumspielen und mich 
einarbeiten. Zwei Artikel hab ich schon durch und bischen was verstanden 
hab ich wohl auch und jetzt wollte ich mein ersten Programm zum laufen 
bekommen aber irgendwas tut nicht. Mein Code sieht so aus ( die Vorlage 
habe ich aus einem Beispiel ):
#include <avr/io.h>                ; das gibt den Controllertyp an

.text                              ; was nun folgt, gehört in den FLASH-Speicher

.global main                       ; main ist auch in anderen Modulen bekannt

main:                              ; zu 'main' wird nach Reset hingesprungen
        ;....   eigene befehle
        
        rjmp Hauptschleife
        
Hauptschleife:                     ; ein Sprunglabel
        ;....   eigene befehle
        
        LDI R24, 0xFF
        OUT DDRD, R24
        
        LDI R24, 0x00
        OUT PORTD, R24
        
        LDI R24, 0xFF
        OUT DDRB, R24
        
        LDI R24, 0xFF
        OUT PORTB, R24
        
        rjmp Hauptschleife         ; immer wiederholen
        

Assemblieren tu ich mit dieser anweisung:
avr-gcc -o beispiel.elf -mmcu=atmega8 test.S && avr-objcopy -O ihex -j .text -j .data beispiel.elf beispiel.hex

kann mir jemand sagen was genau ich falsch mache?

P.S: Warnung bekomme ich folgende geliefert
test.S:1:36: warning: extra tokens at end of #include directive

mfg blan

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Kommentar scheint dem Assembler nicht zu gefallen. Mach diesen mal 
hinter dem Include mal weg.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sieht so aus, als ob das ; in Spalte 36 kein gültiges Zeichen ist. Es 
soll wohl einen Kommentar einleiten.

Beim GNU AS bist du mit /* */ Kommentaren auf der sicheren Seite
http://tigcc.ticalc.org/doc/gnuasm.html#SEC28

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, um die Warnung zu verstehen, musst du ein wenig von C und dessen
Compiler verstehen. ;-)  Das hängt damit zusammen, dass du für die
Einbindung von <avr/io.h> ein Stück des C-Compilers benutzt, den
sogenannten Präprozessor.  Allerdings versuchst du, dieses Stück
C mit Assemblerkommentaren zu mischen:
#include <avr/io.h>                ; das gibt den Controllertyp an

Das versteht der C-Compiler nicht.  Also entweder so:
; das gibt den Controllertyp an
#include <avr/io.h>

oder so:
#include <avr/io.h>                /* das gibt den Controllertyp an */

Aber das ist wohl nicht dein Hauptproblem.  <avr/io.h> ist so
aufgebaut, dass man normalerweise über einen Makro auf die IO-Register
zugreifen soll.  Du musst also schreiben:
        LDI R24, 0xFF
        OUT _SFR_IO_ADDR(DDRD), R24
        
        LDI R24, 0x00
        OUT _SFR_IO_ADDR(PORTD), R24
        
        LDI R24, 0xFF
        OUT _SFR_IO_ADDR(DDRB), R24
        
        LDI R24, 0xFF
        OUT _SFR_IO_ADDR(PORTB), R24

Siehe auch hier:

http://www.nongnu.org/avr-libc/user-manual/assembler.html

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. wrote:

> Beim GNU AS bist du mit /* */ Kommentaren auf der sicheren Seite

Nein, der Assembler darf die auch nicht sehen, der braucht schon das
Semikolon.  Es funktioniert hier aber, da der Präprozessor die
C-Kommentare durch Leerzeichen ersetzt.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wunderbar - danke. hat ja sogar bis auf die kleinigekeiten alles 
gestimmt :)

mfg blan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.