Forum: Compiler & IDEs GCC 4.9 MSP430 Support


von Fabio W. (modellbauer)


Lesenswert?

Guten Abend zusammen,

nachdem ich auf http://gcc.gnu.org las, dass der MSP430 unterstützt 
wird, fand ich das ganz interessant und habe versucht, das bei mir zum 
laufen zu bekommen.
Leider habe ich das nicht hinbekommen.

Dass die ganzen Prozessorspezifischen Include-Files ja wohl nicht dabei 
sind, und dass ich die MSP430-binutils noch brauchte, hab ich mir schon 
fast gedacht. Nachdem ich über homebrew (http://brew.sh) den neusten 
GCC, also 4.9, geladen habe, hat wie erwartet natürlich nichts 
funktioniert.
Alle möglichen -mmcu Varianten hatte ich ausprobiert, also mit msp430 
einfach oder dem speziellen Device. Ganz genau bin ich mir aber nicht 
mal sicher, welche Optionen ich alle wie setzen muss.

Gut, dann hab ich eben versucht, die einzige meiner Meinung schlechte 
Anleitung, die ich gefunden habe, 
(http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Install:redhat) 
ausprobiert, aber das bricht bei mir auch ab, weil irgendein sbrk 
deprecated ist (im Schritt 'Install Binutils for MSP430' beim make).

Hat das vielleicht schon irgendjemand am laufen?

Und was habe ich eigentlich für prinzipielle Vorteile gegenüber der 
Variante einfach den msp430-gcc zu installieren?
Ich mein die MSP-binutils brauch ich ja auch im 4.9er GCC. Hab leider 
noch nicht so den genauen Durchblick. Weil wenn der einzige Vorteil ist, 
dass ich anstatt dem msp430-gcc dann eben in der Kommandozeile die paar 
Buchstaben spare, und ich quasi nur die Universalität der GNU Compiler 
Collection als Vorteil habe, dann mache ich mir die ganze Mühe glaube 
ich doch nicht.

Vielen Dank schonmal für eure Antworten!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Fabio W. schrieb:
> Alle möglichen -mmcu Varianten hatte ich ausprobiert, also mit msp430
> einfach oder dem speziellen Device. Ganz genau bin ich mir aber nicht
> mal sicher, welche Optionen ich alle wie setzen muss.

Der msp430-gcc kennt wohl viele Optionen; zur Codeerzeugung haben die 
aber keinen Effekt, außer ebem msp430, msp430x und msp430xv2.

http://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config/msp430/msp430.c?revision=203520&view=markup#l112

Wobei "msp430" nur in der Doku auftaucht, nicht aber in der 
Compilerquelle.

von Fabio W. (modellbauer)


Lesenswert?

Hmm, und wie soll das dann funktionieren, die richtige Include-Datei zu 
finden?
Denn angeblich ist alles was nicht "#include <msp430.h>" heißt doch 
deprecated, also alles was denn speziellen Device-Namen angeht.

Oder läuft das im GCC anders als beim msp430-gcc.
Ich gehe mal davon aus, dass auch ersterer gemeint war am Anfang der 
Antwort, und nicht tatsächlich der msp430-gcc.

Irgendwie steh ich jetzt aber noch mehr auf dem Schlauch, was denn nun 
der Unterschied zwischen dem msp430-gcc und dem MSP430-Support im GCC 
ist?
Kann mir da mal jemand helfen?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was willst du denn überhaupt machen?

von Fabio W. (modellbauer)


Lesenswert?

Letztendlich war der Grund dafür, dass ich es mit GCC 4.9 ausprobieren 
wollte, dass ich mir dachte, dass es ja sinnvoll und platzsparend sowie 
eleganter aufzurufen ist, wenn ich ein Kommadozeilenprogramm aufrufe, 
egal ob ich jetzt für meinen Mac kompilieren möchte oder Cross-Platform 
für einen MSP430.
Auf die Idee bin ich auch nur gekommen, weil ich etwas davon las, dass 
die GNU Compiler Collection in Version 4.9 wohl von sich aus 
MSP430-Support mitbrächte. Aus benannten Gründen wollte ich das eben 
ausprobieren, ob ich das hinbekomme, auch um wieder etwas mehr 
Kommandozeilen-Erfahrunz zu erlangen.
Allerdings ist mir nicht ganz klar, was jetzt dieser ominöse 
MSP430-Support genau bedeutet. Ich habe bisher die Vermutung, dass es 
nur eine Schnitstelle in der Compiler Collection neu gibt, die es 
ermöglicht, auch für die genannte Prozessorfamilie zu kompilieren. 
Deswegen gehe ich davon aus, dass die ganzen Assembler und 
Linker-Geschichten (also das Back-end ?) noch nicht dabei ist. Deswegen 
wird in dem Link auch der binutils-Kram extra geladen.
Ist das soweit richtig?
Und dann sind da natürlich noch beispielsweise die Include-Files, die ja 
wahrscheinlich auch nicht mit jeder GCC-Installation mitkommen?

Letztendlich kann ich mir natürlich auch alles wieder so installieren, 
wie ich es vorher hatte, sodass ich eben dann in der Kommandozeile den 
msp430-gcc aufgerufen habe. Aber das wär ja auch eigentlich langweilig, 
wenn alles funktioniert. Dann hab ich ja nichts neues gelernt.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Fabio W. schrieb:
> Letztendlich war der Grund dafür, dass ich es mit GCC 4.9 ausprobieren
> wollte, dass ich mir dachte, dass es ja sinnvoll und platzsparend sowie
> eleganter aufzurufen ist, wenn ich ein Kommadozeilenprogramm aufrufe,
> egal ob ich jetzt für meinen Mac kompilieren möchte oder Cross-Platform
> für einen MSP430.
> Auf die Idee bin ich auch nur gekommen, weil ich etwas davon las, dass
> die GNU Compiler Collection in Version 4.9 wohl von sich aus
> MSP430-Support mitbrächte. Aus benannten Gründen wollte ich das eben
> ausprobieren, ob ich das hinbekomme, auch um wieder etwas mehr
> Kommandozeilen-Erfahrunz zu erlangen.
> Allerdings ist mir nicht ganz klar, was jetzt dieser ominöse
> MSP430-Support genau bedeutet. Ich habe bisher die Vermutung, dass es
> nur eine Schnitstelle in der Compiler Collection neu gibt, die es
> ermöglicht, auch für die genannte Prozessorfamilie zu kompilieren.

Ja. Dazu muß GCC als Cross-Compiler configuriert und generiert werden, 
d.h. beim configure setzt du u.a. --target=msp430. Dito für die 
Binutils.

GCC ist ein Open-Source-Projekt, es stellt keine Binärdateien, 
Executables oder Distributionen zur Verfügung.

> Deswegen gehe ich davon aus, dass die ganzen Assembler und
> Linker-Geschichten (also das Back-end ?) noch nicht dabei ist.

Das ist Sache der Binutils, die du ebenfalls aus den Quellen für msp430 
erzeugen mußt.

Da 4.9 die aktuelle Entwicklungsversion des GCC ist, wirst du vermutlich 
vergeblich nach einer fertigen msp430-Toolchain suchen.

> wird in dem Link auch der binutils-Kram extra geladen.
> Ist das soweit richtig?

foo-gcc arbeitet als Text-Text-Transformator: C-Code rein, 
Assembler-Code raus.  Danach ruft der Compiler-Treiber die Binutils auf 
zum Assemblieren und Linken.

> Und dann sind da natürlich noch beispielsweise die Include-Files, die ja
> wahrscheinlich auch nicht mit jeder GCC-Installation mitkommen?

Solche Include-Dateien gehören weder zu GCC noch zu Binutils oder der 
libc.  IdR werden sie in eigenen Projekten zur Verfügung gestellt.  Beim 
avr-gcc werden entsprechende Header wie avr/io.h durch das 
AVR-Libc-Projekt geliefert; dies geht aber über den Umfang einer reinen 
Linc hinaus, was man schon daran erkennt, daß avr/io.h -- oder eben 
msp430.h -- nicht Teil des C-Standards sind.


> Letztendlich kann ich mir natürlich auch alles wieder so installieren,
> wie ich es vorher hatte, sodass ich eben dann in der Kommandozeile den
> msp430-gcc aufgerufen habe. Aber das wär ja auch eigentlich langweilig,
> wenn alles funktioniert. Dann hab ich ja nichts neues gelernt.

D.h. du hast bereits einen funktionierenden msp430-gcc?

Sag doch endlich mal KLAR ob die die Toolchein generieren willst oder 
nur verwenden!

von Stefan E. (sternst)


Lesenswert?

Johann L. schrieb:
> Sag doch endlich mal KLAR ob die die Toolchein generieren willst oder
> nur verwenden!

Er hat sich den neuesten gcc (4.9) für seinen MAC geholt. Und weil er 
zum 4.9 irgendwo "supports MSP430" gelesen hat, dachte er, er könne 
damit sowohl Code für den MAC, als auch für den MSP430 generieren. Er 
dachte, er müsse für den MSP430 nur noch das "Drumherum" dazu packen, 
und schon hätte er Native- und Cross-Compiler in Einem.

von Fabio W. (modellbauer)


Lesenswert?

Johann L. schrieb:
> Ja. Dazu muß GCC als Cross-Compiler configuriert und generiert werden,
> d.h. beim configure setzt du u.a. --target=msp430. Dito für die
> Binutils.

Okay, das wusste ich nicht, dass man das extra angeben muss, aber macht 
ja Sinn. Dann kann das ja auch nicht funktionieren..

Johann L. schrieb:
> GCC ist ein Open-Source-Projekt, es stellt keine Binärdateien,
> Executables oder Distributionen zur Verfügung.

Auch wenn ich nicht so viel Ahnung habe, das weiß ich wohl.

Johann L. schrieb:
> Das ist Sache der Binutils, die du ebenfalls aus den Quellen für msp430
> erzeugen mußt.

Das habe ich ja gerade oben geschrieben, dass Linker, Assembler etc in 
den Binutils sind. Verstehe ich dann jetzt richtig, dass ich diese mit 
entsprechenden Flags beim Configure direkt aus den GCC-Quellen erzeuge? 
Ich dachte, die muss ich extern holen.

Johann L. schrieb:
> Da 4.9 die aktuelle Entwicklungsversion des GCC ist, wirst du vermutlich
> vergeblich nach einer fertigen msp430-Toolchain suchen.

Das suche ich auch nicht, ich wollte mir die Toolchain schon selber 
kompilieren.

Johann L. schrieb:
> Solche Include-Dateien gehören weder zu GCC noch zu Binutils oder der
> libc.  IdR werden sie in eigenen Projekten zur Verfügung gestellt.  Beim
> avr-gcc werden entsprechende Header wie avr/io.h durch das
> AVR-Libc-Projekt geliefert; dies geht aber über den Umfang einer reinen
> Linc hinaus, was man schon daran erkennt, daß avr/io.h -- oder eben
> msp430.h -- nicht Teil des C-Standards sind.

Dass es beim AVR so ist, ist mir bewusst, und deswegen sagte ich ja 
auch, dass die wohl nicht mitkommen. Wie ist das denn beim MSP430? Sind 
die da auch bei einem Libc-Projekt dabei?

Johann L. schrieb:
> D.h. du hast bereits einen funktionierenden msp430-gcc?

Hatte ich, bevor ich mein Notebook neu aufgesetzt habe. Ich könnte das 
auch wieder so ans Laufen bekommen, aber dann kann ich es ja nicht über 
'gcc -mmcu=cc430f6137 main.c ...' aufrufen, sondern muss 'msp430-gcc' 
verwenden. Letztendlich ist ja auch nur das der Vorteil, den ich von dem 
4.9er Support für MSP430s habe? (ich weiß, ich wiederhole mich).
Denn die binutils und libs brauch ich für den MSP430 ja sowieso neu, 
sodass ich letztendlich auch nichts an Platz sparen werde?

Johann L. schrieb:
> Sag doch endlich mal KLAR ob die die Toolchein generieren willst oder
> nur verwenden!

Naja, ich schrob, dass ich den neusten GCC über homebrew geladen habe. 
Ich hab natürlich nicht bedacht, dass man das auch für vorgefertigte 
Kompilate halten kann. Ist aber nicht so, es wird immer alles neu 
kompiliert.

Stefan Ernst schrieb:
> Er hat sich den neuesten gcc (4.9) für seinen MAC geholt. Und weil er
> zum 4.9 irgendwo "supports MSP430" gelesen hat, dachte er, er könne
> damit sowohl Code für den MAC, als auch für den MSP430 generieren.

Ja, so ungefähr ist es. Dass ich natürlich noch die msp430-binutils 
benötige, hab ich aber auch im Eingangspost schon erwähnt. Ich ging 
nicht davon aus, dass man mit GCC standardmäßig für alle unterstützten 
Plattformen crosskompilieren kann.

von Fabio W. (modellbauer)


Lesenswert?

Stefan Ernst schrieb:
> Er
> dachte, er müsse für den MSP430 nur noch das "Drumherum" dazu packen,
> und schon hätte er Native- und Cross-Compiler in Einem.

Je nach Definition von "Drumherum" denke ich das auch immer noch, 
zumindest lese ich das hier raus so: 
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Install:redhat

Das Problem was ich hier nur habe, ist, dass im Binutils-Schritt der 
Error mit sbrk() deprecated kommt.

Dass mein auf gut Glück Versuch mit homebrew nicht funktioniert hat 
mangels --target und soweiter sehe ich ja jetzt ein.

von Kein MSP430 Anwender (Gast)


Lesenswert?


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


Lesenswert?

Fabio W. schrieb:
> Das Problem was ich hier nur habe, ist, dass im Binutils-Schritt der
> Error mit sbrk() deprecated kommt.

Dann poste doch mal die genaue Kommandozeile, die zu dem Fehler (bzw.
zur Warnung) führt und die exakte Fehlermeldung.

von Fabio W. (modellbauer)


Angehängte Dateien:

Lesenswert?

Jörg Wunsch schrieb:
> Fabio W. schrieb:
>> Das Problem was ich hier nur habe, ist, dass im Binutils-Schritt der
>> Error mit sbrk() deprecated kommt.
>
> Dann poste doch mal die genaue Kommandozeile, die zu dem Fehler (bzw.
> zur Warnung) führt und die exakte Fehlermeldung.

Okay, ich habe mal die Ausgabe angehangen.
Diese Ausgabe erscheint, wenn ich 'make' in dem Schritt 'Install 
Binutils for MSP430' von folgender Webseite ausführe: 
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Install:redhat

Ich gehe davon aus, dass wenn ich in irgendeinem Makefile rumsuche und 
dann -Werror abschalte, es bei einem Warning bleibt und trotzdem 
kompiliert wird?
Kann das Problem daran liegen, dass sich hinter meinem Standard-Aufruf 
'gcc' clang befindet, und es mit 'normalem' gcc funktionieren würde, 
weil -Werror bei clang vielleicht per default gesetzt ist?

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


Lesenswert?

Fabio W. schrieb:
> Ich gehe davon aus, dass wenn ich in irgendeinem Makefile rumsuche und
> dann -Werror abschalte, es bei einem Warning bleibt und trotzdem
> kompiliert wird?

Naja, das ist ein Problem deines Betriebssystems.  Das autoconf
versucht ja schon herauszufinden, ob es im jeweiligen System ein
sbrk() gibt.  Wenn es das nicht gibt, wird die entsprechende
Funktionalität gar nicht eincompiliert (das wird nur zum Erzeugen
der Speicher-Statistik benutzt).  Dummerweise gibt es aber in deinem
System die Funktionalität zwar, aber anschließend heult das System
herum, dass man sie gar nicht benutzen solle ... du kannst auch nach
dem configure einfach das HAVE_SBRK im generierten config.h
auskommentieren, dann müsste es auch gehen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Eigentlich sollte doch ein

$ make CFLAGS="-Wno-error"

reichen?

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.