Forum: Compiler & IDEs (Allg./Informativ): gcc für mikrocontroller


von Tom (Gast)


Lesenswert?

Hallo,

ich bin auf der Suche nach Aufklärung zum Thema GCC für diverse uC 
Targets.
Das soll sich hier als Diskussionsrunde verstanden werden.

Ich kenne den GCC vor allem als Compiler für den PC. Nun gibt es aber 
spezielle GCC "Versionen" für z.B- ARM, AVR, Freescale MCUs, ..

Wie kann ich das in meinem Kopf sortieren ?
Könnte ich meinen in debian eingebundenen gcc mit einer langen 
Parameterliste dazu bringen ein Programm für einen uC zu erzeugen oder 
geht das gar nicht? (Und vll. noch wieso nicht?)

Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf 
wählbar....

Dann gibt es viele Anleitungen den gcc (als Compiler)  für diverse 
targets zu compilieren. Geht das mit dem reinen GCC Sourcen? Oder ist 
das ein eigenständiger Quellcode ? ( Was hat das dann mit dem GCC zu 
tun?)

 Das vielleicht erstmal als Einstieg... ich hoffe ihr könnt mir helfen 
die Fragezeichen aus meinem Kopf zu bekommen.

Schönes Wochenende

Tom

von tipper (Gast)


Lesenswert?

Tippe mal auf passende Target-Pakete :-P

von Jim M. (turboj)


Lesenswert?

> gcc mit einer langen
> Parameterliste dazu bringen ein Programm für einen uC zu erzeugen

Das geht so einfach nicht, gcc erzeugt nur code für "seine" Architektur. 
Die gibt man beim Kompilieren des gcc an.

> Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf
> wählbar....

Man kann nur eine Variante der Architektur wählen; bei X86 also z.B. 
zwischen i386, i486 oder einer 64-Bit Variante.

Bei den ARM (Cross-) Compiler Versionen kann man so z.B. zwischen ARMv6 
und ARMv7-M auswählen. Aber ein gcc für X86 Target kann keinen ARM Code 
erzeugen.

Man sollte bedenken, dass der GCC als Frontend einfach nur Assembler 
ausspuckt - und dann gleich den AS aus Binutils aufruft um das 
Objektfile zu erzeugen.

> [...]verschiedene  targets [...] Geht das mit dem reinen GCC Sourcen?

Ja. Use the Source, Luke. Ist aber etwas komplizierter, weil man eben 
noch passende Binutils und C-Lib braucht.

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


Lesenswert?

Tom schrieb:
> Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf
> wählbar.

Nein, sie wird durch die --target-Option beim configure festgelegt.

Wenn --host und --target verschiedene Architekturen beschreiben, dann
spricht man von einem Cross-Compiler.

von Konrad S. (maybee)


Lesenswert?

Ich widerspreche ja nur ungern ... tu's aber doch!

Ich habe unter Linux einen gcc-4.4.3 (x86_64) und den avr-gcc-4.3.4 
installiert. Mit diesem Aufruf:
1
gcc -b avr -V 4.3.4 -c x.c
kompiliert der gcc schön brav für den AVR.
1
file x.o
2
x.o: ELF 32-bit LSB relocatable, Atmel AVR 8-bit, version 1 (SYSV), not stripped

Erwartungsgemäß liefert der gcc standardmäßig x86-Code:
1
gcc -c x.c
2
file x.o
3
x.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

Das liegt daran, dass sich "gcc" anhand der Optionen aussucht, für 
welche MACHINE bzw. VERSION er kompiliert.

von Rolf Magnus (Gast)


Lesenswert?

Konrad S. schrieb:
> Das liegt daran, dass sich "gcc" anhand der Optionen aussucht, für
> welche MACHINE bzw. VERSION er kompiliert.

Diese Option kannte ich auch noch, funktioniert aber wohl mit neueren 
GCCs (ich hab 4.6.1) nicht mehr.
Letztendlich muß man aber trotzdem den kompletten GCC für jede 
Zielplattform installiert haben. Die von dir genannte Kommandozeile 
macht eigentlich nichts weiter als aus übergebener Zielplatform und 
-version einen Aufruf für den eigentlichen Compiler zu basteln, an den 
das dann einfach weitergereicht wird. Dein

Konrad S. schrieb:
> gcc -b avr -V 4.3.4 -c x.c

ist äquivalent zu:
1
avr-gcc-4.3.4 -c x.c

von Konrad S. (maybee)


Lesenswert?

Rolf Magnus schrieb:
> Diese Option kannte ich auch noch, funktioniert aber wohl mit neueren
> GCCs (ich hab 4.6.1) nicht mehr.

Ist wohl beim gcc-4.5.4 letztmalig dokumentiert.
Naja, der Verlust hält sich in Grenzen. ;-)

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.