mikrocontroller.net

Forum: Compiler & IDEs Aus dem Makefile dem Assembler eine Variable übergeben!


Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich möchte ein Stück Software compilieren (Eclipse und WinARM), wobei 
für die Initialisierung des SAM7X256 ein startup.s notwendig ist. Dem 
Aufruf vom GCC Assembler möchte ich nun eine Variable (SAM7X256 od. 
SAM7X64 od. ähnliches) mitgeben, die wiederum im Assembler Code 
ausgewertet werden kann.
Hintergrund ist das eigentliche Setzen vom Stackpointer auf das reale 
Speicherende. Bisher habe ich keine Möglichkeit gefunden (vielleicht bin 
ich ja auch nur zu blöde) und ich möchte eigentlich die Definition für 
welche CPU (Speicher) dieses Programm übersetzt werden soll im Makefile 
durchführen und nicht im Assembler fest codieren.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfachste Lösung ist wahrscheinlich den C-Preprozessor zu verwenden. 
Assembler nicht direkt aufrufen, sondern über das Frontend (arm-*-gcc), 
Dateiendung der Assemblerdatei mit grossem S und "Umschalter-Defintion" 
per -D übergeben.

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin

Ich hatte die -D Option schon ausprobiert, musste in der arm-elf-as.exe 
Beschreibung feststellen, das die Option -D nur der Kompatibilität zu 
anderen Compiliern dient und eigentlich ignoriert wird. Warum der 
Unterschied "s" und "S" und was bewirkt dieser Unterschied?

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

Bewertung
0 lesenswert
nicht lesenswert
Du rufst nicht as (bzw. arm-elf-as) selbst auf, sondern du rufst
gcc (arm-elf-gcc) mit einer *.S-Datei auf.  Dieser wiederum nimmt
den Suffix .S als Kennzeichen, dass er den C-Präprozessor (cpp)
mit all den für den Präprozessor relevanten Optionen (-D, -I, -U)
auf die originale Datei aufrufen soll, und anschließend den
eigentlichen Assembler auf die Ausgabe des Präprozessors losschickt.

Bei Dateien auf *.s hingegen würde der Compiler nur den Assembler
rufen.

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, ich bin heute aber schwer von Begriff!!

Ja, ich benutze "arm-elf-gcc". Mein Aufruf ->
arm-elf-gcc -g -mcpu=arm7tdmi -DAT91SAM7X256 -c -O0 -Wall -I./ 
-Wa,-adhlns=cstartup.lst,--gdwarf-2 cstartup.s -o cstartup.o
Der wiederum ruft den Assembler "as.exe" auf.
Im Assembler Code habe ich die Definition ->
.ifdef AT91SAM7X256
 .print "TOP_OF_MEMORY,  0x00210000"
 .equ  TOP_OF_MEMORY,  0x00210000
.endif
Aber ich erhalte die Fehlermeldung ->
D:\Programme\Atmel\ARM\Projekte\Olimex_SAM7X256_RAM/cstartup.s:252: 
undefined reference to `TOP_OF_MEMORY'

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder etwas gelernt!!

Wenn ich die Datei umbenenne, Endung mit "S", kann ich im Ass-Code mit 
#ifdef (nicht mit .ifdef) tatsächlich die Variable die mit "-D" 
eingestellt wird abfragen.

Vielen Dank euch Beiden!!

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

Bewertung
0 lesenswert
nicht lesenswert
Du kannst dann übrigens auch im Assemblercode C-Kommentare benutzen. ;-)

(Das liegt daran, dass diese Kommentare auch bereits vom Präprozessor
durch Leerzeichen ersetzt werden.)

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja einfach!!
Dann kann ich sogar die at91sam7x256.h mit includieren (blödes Wort) und 
brauche nicht alle schon fertigen Definitionen nochmals machen.
Das ist ja einfach!!

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

Bewertung
0 lesenswert
nicht lesenswert
Genau so ist es wohl sicher auch gedacht gewesen...

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.