Forum: Compiler & IDEs Warum ARM-Code nicht mit GCC compilieren?


von Martin Neubauer (Gast)


Lesenswert?

Hallo liebe Leute,

ich stehe im Moment vor einer echten Verständnisfrage, die mit einfach 
nur fertig macht.

Und zwar: Bis jetzt hab ich nur AVR's und früher mal PIC's programmiert, 
in ASM und C. Jetzt wollte ich mich mal umschauen, und bin auf die 
LPC2000-Serie von NXP gestoßen, sprich also ARM-Controller, die ich vl. 
auch nächstes Jahr bei meinem Maturaprojekt hernehmen kann ( muss noch 
den Lehrer überreden, weil er darüber nicht glücklich ist...zu 
kompliziert?).

Nun hab ich mich reingelesen, wie so alles bei diesen Controller ab 
geht, und was man braucht (wie z.B. Startup-Code, was ja bei den Avr ein 
Fremdwort ist).

Jetzt wollte ich von anderen Projekten aus dem Netz, "fertige" Programme 
für z.B. den LPC2106 compilieren, was aber nicht ging.

Lange rede kurzer Sinn: Warum brauch extra eine neue Toolchain 
(arm-elf-gcc?), wenn doch unter Linux der gcc verfügbar ist?

Kann mir das wer technisch erklären, (also die klassische Frage, nach 
dem warum) bzw. mir Quellen zum Lesen linken?

Ich hoffe ihr könnt weiterhelfen...sonst schlafe ich ganz unruhig - ihr 
kennt das vl.

Liebe Grüße

Martin

von Wiesi (Gast)


Lesenswert?

Nun ja. Der arm-elf-gcc ist doch ein GCC. Nur hat ja der ARM einen 
anderen Befehlssatz als z.B. dein PC. Darum brauchst du einen 
Cross-Compiler, also eine Toolchain, die auf dem PC läuft, aber Code für 
den ARM generiert.
Das ist ja bei anderen Mikrocontrollern auch nicht anders, nur ist es 
dir da anscheinend nicht aufgefallen.

  Wiesi

von Martin Neubauer (Gast)


Lesenswert?

Danke, Wiesi für deine schnelle Antwort!

Das dachte ich mir auch.

Was ich dann aber noch immer nicht ganz verstehe..wieso bietet mir der 
gcc die Option -march=arm7tdmi an, wenns sowieso nicht geht? Irgendwie 
schein ich da einen Denkfehler drinnen zu haben, oder die ganze Struktur 
noch nicht zu verstehen!

von Wiesi (Gast)


Lesenswert?

Das kann ich dir auch nicht so genau sagen, würde micht auch 
interessieren. Ich denke, dass der GCC immer nur für eine 
Zielarchitektur compiliert wird. Nur ist das oft eine ganze Familie. 
z.B. ARM7, ARM9, mit/ohne Thumb Befehlssatz.

Auf dem PC ist das ähnlich. Da kann man mti -march z.B. angeben, ob man 
für i386, i486, pentium4, ... compiliert, sodass die Etweiterungen der 
entsprechenden CPUs auch genützt werden.

von Frank L. (florenzen)


Lesenswert?

Martin Neubauer wrote:
> Danke, Wiesi für deine schnelle Antwort!
>
> Das dachte ich mir auch.
>
> Was ich dann aber noch immer nicht ganz verstehe..wieso bietet mir der
> gcc die Option -march=arm7tdmi an, wenns sowieso nicht geht? Irgendwie
> schein ich da einen Denkfehler drinnen zu haben, oder die ganze Struktur
> noch nicht zu verstehen!

Bietet er sie dir denn wirklich an? Wo hast du dieses Angebot her? Aus 
der Manpage? Falls ja solltest du beachten, daß die gcc-manpage Optionen 
nach Target-Platform listet, d.h. Optionen die in mehreren Targets 
unterstützt werden kommen mehrfach vor. Die Option -march=arm7tdmi, die 
es übrigens nicht gibt, du meintest vermutlich -mcpu=arm7tdmi, findet 
sich in "ARM Options" wo sie ja auch Sinn macht. Unter einem i386-gcc 
angegeben führt sie vermutlich nur zu einem Fehler, dafür bietet der 
x86-gcc aber i386, i486, i586|pentium, pentium-mmx, i686|pentiumpro, 
pentium2, usw. an.

gruss
f

Edit: Kleine Ungenauigkeit.

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.