www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik avr-as Problem mit include und allgemeiner Syntax


Autor: Stephan W. (stephan-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Programm in Assembler geschrieben, welches ich auch ohne
Probleme mit dem AVR-Studio Assembler (AVRASM2) übersetzen und laufen
lassen konnte. Jetzt möchte ich darin enthaltene Funktionen gern im
Rahmen eines C-Projektes nutzen. Natürlich meckert der GCC-Assambler
avr-as über andere Syntax. Das ist ärgerlich, aber nachvollziehbar. Gibt
es ein Dokument in dem nötige Anpassungen (avrasm -->
avr-as)zusammengefasst sind? Exemplarisch konnte ich herausfinden, dass
es zum Beispiel folgende Translation gibt:

aus  .equ SPM_PAGESIZE = SPM_PAGESIZE*2    ; im AVRASM2

wird .equ SPM_PAGESIZE , SPM_PAGESIZE*2    ; im AVR-AS


Nun habe ich aber ein weiteres Problem: Welche Include-Datei muss ich
nehmen, um im .S-Source-File verwendete defines wie das o.g.
SPM_PAGESIZE nutzen zu können?

Für meinen ATmega 1281 gibt es da ja die m1281def.inc und die iom1281.h.
Letztere ist für C-Files da und mit der ersten INC-Datei kann der avr-as
scheinbar nicht umgehen (mit dem AVRASM2 ging es natürlich wunderbar):

beim includieren mittels .include "m1281def.inc" kommen jedenfalls
hunderte Fehlermeldungen aus der Datei. Auszug:

m1281def.inc: Assembler messages:
m1281def.inc:47: Error: unknown pseudo-op: `.device'
m1281def.inc:49: Error: expected comma after "SIGNATURE_000"
m1281def.inc:50: Error: expected comma after "SIGNATURE_001"
m1281def.inc:51: Error: expected comma after "SIGNATURE_002"
m1281def.inc:60: Error: expected comma after "UDR3"
m1281def.inc:61: Error: expected comma after "UBRR3H"
m1281def.inc:62: Error: expected comma after "UBRR3L"
m1281def.inc:63: Error: expected comma after "UCSR3C"
...
...
...

Welche Datei muss ich nun für den Include nehmen?

Ich danke für Eure Hilfe.

vG Stephan

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst die Atmel-.inc-Files nicht mit avr-as verwenden, dazu ist die 
Syntax zu unterschiedlich.  Ein
#include <avr/io.h>
am Beginn Deines Assembler-Programms holt Dir alle Definitionen für den 
momentanen µC.  Welcher das ist, bestimmt die -mmcu=... - Angabe auf der 
Kommandozeile.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Welche Datei muss ich nun für den Include nehmen?

avr/io.h

Wenn der MCU korrekt auf dein Target Atmegam1281 definiert ist, 
includiert die automatisch avr/iom1281.h.

Und du musst die richtige Endung für die Sourcen haben, damit vor dem 
gnu-as der C-Präprozessor drüber läuft (.S).
file.s
    Assembler code.
file.S
    Assembler code which must be preprocessed. 
http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Overal...

Nicht geprüft habe ich, in welcher Includedatei SPM_PAGESIZE definiert 
ist. Eine Textsuche in dem Includeverzeichnis des AVR-GCC bzw. WinAVR 
müsste da aber weiterhelfen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Stolperstein verdient noch erwähnt zu werden:  Das ist 
_SFR_IO_ADDR().  Während der Atmel-Assembler die Adressen passend für 
die in-, out-, sbis-, etc.-Befehle liefert, also z.B. 0x02 für PORTB 
beim ATmega644P, werden bei der GCC-Toolchain die Memory-gemappten 
Adressen verwendet, also im Beispiel 0x22.

Die Umsetzung auf die I/O-Adressen geschieht über das Macro 
_SFR_IO_ADDR.  _SFR_IO_ADDR(PORTB) würde also die gewünschten 0x02 
liefern.

Du kannst das global umstellen, indem Du zu Beginn Deines 
Assembler-Files ein
#define __SFR_OFFSET 0
voranstellst.  Dann liefert im Beispiel PORTB wieder 0x02.  Für Dateien, 
die im Nachhinein auf den anderen Assembler umgestellt wurden, ist das 
ein guter Workaround.  In Dateien, die von Anfang an für avr-as 
geschrieben werden, würde ich das Macro nehmen, das erscheint mir 
sauberer.

Autor: Stephan W. (stephan-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke für Eure Hilfe!

Habt ihr noch eine Idee zu dem ersten Problem?

-->

>Gibt es ein Dokument in dem nötige Anpassungen (avrasm -->avr-as)>zusammengefasst 
sind?

Vielleicht gibt es ja schon irgendwo solch eine Zusammenstellung,...


vG Stephan

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
>>Gibt es ein Dokument in dem nötige Anpassungen (avrasm -->avr-
> zusammengefasst sind?

Ich kenne keines, habe aber ein Skript, das ein paar grundlegende 
Umsetzungen vornimmt.  Ich würde trotzdem davon abraten:  Atmels 
Assembler verwendet im Flash Wortadressen, avr-gcc Byteadressen. 
Einfache Verdoppelung der Adressen geht nicht, da SRAM- und I/O-Adressen 
immer Byteadressen sind und die Erkennung, wo das Ziel ist, praktisch 
nicht automatisierbar ist.  Unterm Strich hast Du somit etwas, was 
meistens hinhaut, aber umso mehr Arbeit macht, weil der Friede 
trügerisch ist.

Wenn Du das Skript trotzdem versuchen möchtest: es heißt _conv.awk und 
ist Teil von: Beitrag "Re: Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain".

Autor: Stephan W. (stephan-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank mizch,

die Bedenken bezüglich der Adresseverwaltung, die du genannt hast, habe 
ich noch garnicht betrachtet. Unter dem Umstand werde ich wohl doch 
händisch die Änderungen vornehmen. So viel ist es wahrscheinlich 
garnicht.

vG Stephan

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.