Forum: Compiler & IDEs Problem mit Make-File (aus Yagarto-Bsp.)


von Lukas R. (mikrobroesl)


Angehängte Dateien:

Lesenswert?

Hallo an alle!

Ich versuche gerade ein bisschen mit Make-Files zu experimentieren - was 
das betrifft, bin ich leider noch Anfänger.
Als Vorlage habe ich ein Make-File, welches ursprünglich von einem 
Beispiel auf der Yagarto-Page stammt.

Nun, soweit ist alles gut, ich kann meine gewünschten C-Sources 
kompilieren und alles läuft prima.
Nur wenn ich versuche eine Assembler-Datei (vectors.s) miteinzubeziehen, 
dann kommt folgender Fehler:

make: ***[source01_arch/vectors.o] Error1

Ich habe bereits gelesen, dass das wohl bedeutet, dass es die Datei 
"vectors.o" nicht gefunden werden kann. In meinem Fall müsste das ja nun 
heißen, dass vectors.s gar nicht kompiliert wurde?
Ich suche nun schon seit ein paar Tagen den Fehler, da mir aber leider 
die nötige Erfahrung fehlt, komm ich leider nicht weiter...deswegen 
versuch ich es hier :-)

Ich habe das Make-File mal im Anhang angebracht.

Viele Grüße

von ich (Gast)


Lesenswert?

Hast Du auch einen Output von einem Make Durchgang mit vectors.s?
Dann sieht man eher was er gemacht hat und wo er abgebrochen hat.

von Andreas H. (ahz)


Lesenswert?

Lass das Makefile bitte mal mit der "-d" Option laufen und poste den 
Output.

Grüße
Andreas

von Lukas R. (mikrobroesl)


Lesenswert?

Oh sorry, daran habe ich gar nicht gedacht und hab auch total vergessen 
da mal nachzusehen ^^

Output:
---
make all
arm-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m3 -g -gdwarf-2 
-Wa,-amhls=src_01_arch/vectors.lst   src_01_arch/vectors.s -o 
src_01_arch/vectors.o
cc1: error: target CPU does not support ARM mode
make: *** [src_01_arch/vectors.o] Error 1
---

von Lukas R. (mikrobroesl)


Lesenswert?

Ich verstehe nich, warum die Meldung kommt, dass die Target-CPU den 
ARM-Mode nicht unterstützt.
In einem anderen Projekt, hatte ich das gleiche Target und da 
funktionierte alles einwandfrei? Allerdings hatte ich da nichts mit 
Assembler-Dateien vor.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lukas R. schrieb:
> Ich verstehe nich, warum die Meldung kommt, dass die Target-CPU den
> ARM-Mode nicht unterstützt.

Weil ein Cortex-M nun einmal keinen ARM-Mode unterstützt, sondern
nur Thumb-Mode.  It's not a bug, it's a feature.

Mit anderen Worten: du brauchst für einen Cortex-M anderen
Assemblercode als für einen klassischen ARM.

von Lukas R. (mikrobroesl)


Lesenswert?

Mhh, das besagte Assembler-File ist extra für Cortex-M-Architektur 
geschrieben worden (aus der HAL des freien OS ecos) ==> thumb2

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kann es sein, dass du noch -mthumb (oder -mthumb2?) mit in den
Assembleroptionen angeben musst?

Btw., die Namenskonvention sieht für Assemblerdateien, die noch durch
den Präprozessor geschickt werden sollen, ein großes .S als Suffix
vor.  Wenn man dies so auf der Kommandozeile angibt, dann braucht
man auch das «-x assembler-with-cpp» nicht, das ist dann implizit.

von Lukas R. (mikrobroesl)


Lesenswert?

Vielen Dank - gut zu wissen :)

Heißt also, es ist ein Unterschied, ob ich .s oder .S im Make-File 
verwende, richtig? Also case-sensitiv.
Weißt du zufällig ein Tutorial für Make-Files? Bzw. eine Art 
Quick-Reference, sofern es so etwas gibt?

-thumb2 schluckt er wohl nicht...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lukas R. schrieb:
> Heißt also, es ist ein Unterschied, ob ich .s oder .S im Make-File
> verwende, richtig? Also case-sensitiv.

Ja, wobei es dem make selbst völlig egal ist.  Es ist der Compiler-
Treiber (also der «arm-none-eabi-gcc» in diesem Falle hier), der
die Argumente der Kommandozeile auswertet und danach sortiert,
welche Kette von Aktionen er ausführen muss.

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.