Aus dem Makefile dem Assembler eine Variable übergeben!

Gast #781900
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.
Gast #781927
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?
Moderator Persönliche Seite #781961
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.
Gast #781966
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'
Gast #781983
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!!

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