C++ Compiler für µCs

OP #6152866
Lesenswert?

Unterstützen C++ Compiler für verschiedene µC-Architekturen mittlerweile 
durchgängig C++11 bzw. C++14?

Ich hab eine Idee für eine Library, die im Wesentlichen für 
Microcontroller gedacht ist.  Es wäre schön, wenn ich das mit C++14 
umsetzen kann ohne mich zusehr auf einige wenige Architekturen zu 
beschränken, die das bereits unterstützen.

Unabhängig von der obigen Frage würde es mich auch interessieren, welche 
Version der Sprache (C oder C++) von eurer Toolchain unterstützt wird. 
Der XC8 von Microchip (C-Compiler) ist ja z.B. immer noch auf C89 
Niveau.  Daher rührt auch die Befürchtung, dass viele meine Bibliothek 
nicht nutzen könnten, wenn ich diese mit C++14 schreibe.
Gast #6152942
Lesenswert?

> ist ja z.B. immer noch auf C89 Niveau.

Wenn du deine grossartige Library nicht in C89 fassen kannst,
ist sie womoeglich gar nicht so grossartig und der Rest der
Welt kann gerne darauf verzichten.
#6152988
Lesenswert?

Danish B. schrieb:
> Unterstützen C++ Compiler für verschiedene µC-Architekturen mittlerweile
> durchgängig C++11 bzw. C++14?

Das hängt allein von der Compilerversion ab. Beim verbreiteten gcc steht 
C++14 ab 7.3 zur Verfügung.

XC8 von Microchip verwendet den gcc5.4, damit hättest du zumindestens 
C++11.

Nur das du auf dem Laufenden bist. In paar Tagen-Wochen kommt gcc10 raus 
mit C++20 Unterstützung.

Um welche µC handelt es sich denn? Danach richtet sich welche Toolchain 
du benötigst. Der Compiler hat erstmal nichts direkt mit der µC 
Unterstützung zu tun.
Gast #6152998
Lesenswert?

Danish B. schrieb:
> Unterstützen C++ Compiler für verschiedene µC-Architekturen mittlerweile
> durchgängig C++11 bzw. C++14?

Der Hype ist schon lange durch. Wenn du den krassen letzten Scheiß 
willst, übersetzt du deine C++20 library mit clang und llvm nach 
javascript/Webassembly und lässt das völlig cross-platform in nodejs auf 
deinem Controller laufen.
Gast #6153207
Lesenswert?

Nur Anfänger proggen Mikrocontroller in C++ schrieb:
> Der Hype ist schon lange durch. Wenn du den krassen letzten Scheiß
> willst, übersetzt du deine C++20 library mit clang und llvm nach
> javascript/Webassembly und lässt das völlig cross-platform in nodejs auf
> deinem Controller laufen.

Ich bin jetzt unsicher ob das ironisch gemeint war oder dein voller 
ernst.

Tatsache ist, dass Menschen mit einer gewissen Reife von dieser 
Technologie ungefähr gar nichts halten. Es taugt bestenfalls als 
kurzzeitiges Forschungsobjekt.
Gast #6153235
Lesenswert?

Stefan ⛄ F. schrieb:
> Ich bin jetzt unsicher ob das ironisch gemeint war oder dein voller
> ernst.

Ich bin jetzt sicher, dass mich deine Kommentare hier kein Stück 
interessieren.

Tatsache ist, dass Menschen mit einer gewissen Reife von dir exakt gar 
nichts halten. Es wäre eine Bereicherung für 99,99% der Nutzer, wenn du 
dieses Forum verlässt. Du taugst bestenfalls als schlechtes Beispiel.
Gast #6153250
Lesenswert?

Ach..  "Ironie"?

Nixda.
Das ist einfach nur ein Terrorvogel, der im Grunde nix zum Thema sagen 
kann und dessen einziges Ziel, es ist, Zwietracht zu sähen, bzw. 
schlechte Stimmung zu verbreiten..
Gast #6153262
Lesenswert?

von Nur Anfänger proggen Mikrocontroller in C++ schrieb im Beitrag 
#6153235:
> Tatsache ist, dass Menschen mit einer gewissen Reife von dir exakt gar
> nichts halten. Es wäre eine Bereicherung für 99,99% der Nutzer, wenn du
> dieses Forum verlässt.

Interessante Fakten, die du da zu wissen glaubst. Nur entstammen sie 
Leider ausschließlich deiner unreifen Phantasie.
#6153342
Lesenswert?

Danish B. schrieb:
> Unterstützen C++ Compiler für verschiedene µC-Architekturen mittlerweile
> durchgängig C++11 bzw. C++14?

Weil die Antworten bisher alle irgendwie um den heissen Brei drumrum 
geredet haben, nochmal Klartext:

Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs, 
und können alle das, was die jeweilige gcc-Version halt kann.

Nutzt du einen anderen Compiler, dann musst du in dessen Doku nachlesen, 
was der unterstützt.

Ob es dann für deinen speziellen Mikrocontroller eine C/C++-lib gibt, 
und was die dann unterstützt, musst du dann auch nachschauen.

Oliver
OP #6153381
Lesenswert?

Veit D. schrieb:
> Um welche µC handelt es sich denn? Danach richtet sich welche Toolchain
> du benötigst. Der Compiler hat erstmal nichts direkt mit der µC
> Unterstützung zu tun.
Ich hab keine konkreten µCs im Kopf.  Es sollen "so viele wie möglich" 
unterstützt werden.  Aber vermutlich wird es sich hauptsächlich um ARM 
handeln.

Stefan ⛄ F. schrieb:
> Danish B. schrieb:
>> Defacto wäre das dann ja die gesamte Sprachfunktionalität.
>
> Der C++ Compiler Compiler und die C++ Standard-Bibliothek sind
> allerdings zwei getrennte paar Schuhe.
Oh. Das habe ich gar nicht bedacht :/.


Oliver S. schrieb:
> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
> und können alle das, was die jeweilige gcc-Version halt kann.

Die sind aber nicht zwangsläufig auf aktuellem Stand (,oder?).

Ich hab mal testweise diverse C++-Compiler im Compiler Explorer mit C++ 
11 Code ausprobiert:
1
void nothing() { volatile int *ptr = nullptr; }

Der MIPS-GCC ist der einzige Testkandidat der das nicht kompilieren 
kann.
Erfolgreich sind:
- ARM GCC
- AVR GCC
- RISC-V rv32gc clang
- MSP430 GCC
- und sicherlich noch einige mehr

Im Wesentlichen wird der Misserfolg von MIPS GCC an der Version liegen 
(5.4).


https://godbolt.org/z/jRZL6e
#6153453
Lesenswert?

Danish B. schrieb:
> Im Wesentlichen wird der Misserfolg von MIPS GCC an der Version liegen
> (5.4).

Oliver S. schrieb:
> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
> und können alle das, was die jeweilige gcc-Version halt kann.

Ein gcc 5.4 ist halt ein gcc 5.4
Klingt komisch, ist aber so.

Es hindert dich aber niemand daran, dir selber einen MIPS gcc 9.2 oder 
auch jede andere Version zu bauen.

Arduino Fanboy D. schrieb:
> Oliver S. schrieb:
>> alle
> Das stimmt nicht.

Beispiel?

Oliver
Gast #6153484
Lesenswert?

Oliver S. schrieb:
> Arduino Fanboy D. schrieb:
>> Oliver S. schrieb:
>>> alle
>> Das stimmt nicht.
>
> Beispiel?

Hier Beitrag "Re: C++ Compiler für µCs" habe ich 
verlinkt, welche Version was kann.

Klarer gehts kaum!

-------

Danish B. schrieb:
> Ich hab mal testweise diverse C++-Compiler im Compiler Explorer mit C++
> 11 Code ausprobiert:void nothing() { volatile int *ptr = nullptr; }
>
> Der MIPS-GCC ist der einzige Testkandidat der das nicht kompilieren
> kann.

Kann ich nicht bestätigen.
Gast #6153597
Lesenswert?

von Nur Anfänger proggen Mikrocontroller in C++ schrieb im Beitrag 
#6153235:
> Tatsache ist, dass Menschen mit einer gewissen Reife von dir exakt gar
> nichts halten. Es wäre eine Bereicherung für 99,99% der Nutzer, wenn du
> dieses Forum verlässt.

Achja, dann bin ich wohl bei den 0.1%, schön.

>
> Du taugst bestenfalls als schlechtes Beispiel.

Dafür, dass dieser Typ eine Website mit kostenlosen PDFs unterhält ist 
das doch etwas übertrieben, er ist doch defacto einer der wenigen guten 
Beispiele in diesem Forum.
Dieses Forum wird von 5-10 Leuten getragen (je nach Unterforum) Stefan 
gehört da zu 100% dazu.
Gast #6153731
Lesenswert?

>Dieses Forum wird von 5-10 Leuten getragen (je nach Unterforum) Stefan
>gehört da zu 100% dazu.

Das sehe ich auch so.
Nur einen kleinen Hinweis an Dich, Stefan: Manchmal lässt Du Dich von 
anderen   Bemerkungen hinreisen, die man freundlicher formulieren 
könnte. Ich denke, Du könntest Deine Anerkennung noch etwas erhöhen, 
wenn Du Dich nicht auf solche Sachen einlässt.
#6154312
Lesenswert?

pumuggl schrieb:
>> ist ja z.B. immer noch auf C89 Niveau.
>
> Wenn du deine grossartige Library nicht in C89 fassen kannst,
> ist sie womoeglich gar nicht so grossartig und der Rest der
> Welt kann gerne darauf verzichten.

Man kann natürlich alles auch noch in antiken Sprachversionen verfassen. 
Allerdings dreht sich auch in der IT die Welt weiter, und man muss in 
der Regel nicht mehr auf einen vollkommen veralteten Standard setzen, 
der eigentlich vor über 20 Jahren bereits durch seinen Nachfolger 
ersetzt wurde. Es sei den eben, man ist gezwungen, einen Compiler zu 
verwenden, der sich seit den Neunzigern nicht weiterentwickelt hat.

Oliver S. schrieb:
> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
> und können alle das, was die jeweilige gcc-Version halt kann.

Naja, die mitgelieferte libstdc++ und libsupc++ steht nicht auf allen 
Plattformen in gleichem Maße zur Verfügung. Beim AVR beispielsweise 
fehlt die komplette Standardbibliothek, und exception handling 
funktioniert auch nicht.

Oliver S. schrieb:
> Es hindert dich aber niemand daran, dir selber einen MIPS gcc 9.2 oder
> auch jede andere Version zu bauen.

Oder einfach einen zu installieren. Gibt's ja durchaus:
https://packages.debian.org/sid/gcc-9-mips-linux-gnu

TR.OLL schrieb:
> Joghurtbecher mit Arsenfüllung schrieb:
>> C**
>
> Sein wann gibt es C**?

Ich vermute, er hat den Finger versehentlich auf der Shift-Taste 
gelassen.

TR.OLL schrieb:
> Oder für eine schlechtere Variante von C++ z.B.: einen Kompromiss
> zwischen C und C++.

Da wäre doch eher C+=0.5 passend. ;-)
C-- wäre ja weniger als C.
Gast #6154352
Lesenswert?

Rolf M. schrieb:
> Oliver S. schrieb:
>> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
>> und können alle das, was die jeweilige gcc-Version halt kann.
>
> Naja, die mitgelieferte libstdc++ und libsupc++ steht nicht auf allen
> Plattformen in gleichem Maße zur Verfügung. Beim AVR beispielsweise
> fehlt die komplette Standardbibliothek, und exception handling
> funktioniert auch nicht.

Naja...

Dass der Lieferumfang nicht der selbe ist, sollte doch schon klar 
geworden sein.
Der Sprachumfang wird allerdings vom Kompiler abgedeckt, nicht von den 
Libs.


Ein großer Teil der Libs benötigt die dynamische Speicherverwaltung.
Das ist auf den kleinen 8Bittern recht unpraktikabel.
Womit dann schon mal ein Grund für die Abwesenheit gefunden wäre.

Auch Exceptions sind auf den 8Bittern eher eine Qual.

Wobei ich mir recht sicher bin, dass man diese im Kompiler aktivieren 
kann, wenn man nur ernstlich will.
ungetestet
#6154396
Lesenswert?

Arduino Fanboy D. schrieb:
> Rolf M. schrieb:
>> Oliver S. schrieb:
>>> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
>>> und können alle das, was die jeweilige gcc-Version halt kann.
>>
>> Naja, die mitgelieferte libstdc++ und libsupc++ steht nicht auf allen
>> Plattformen in gleichem Maße zur Verfügung. Beim AVR beispielsweise
>> fehlt die komplette Standardbibliothek, und exception handling
>> funktioniert auch nicht.
>
> Naja...
>
> Dass der Lieferumfang nicht der selbe ist, sollte doch schon klar
> geworden sein.

Im obigen Zitat von Oliver S. steht aber genau das Gegenteil.

> Der Sprachumfang wird allerdings vom Kompiler abgedeckt, nicht von den
> Libs.

Die Standardbibliothek ist Teil von C++. Und es gibt außerdem auch 
bestimmte Dinge im Sprachkern, die Bibliothekssupport benötigen, wie 
eben Exceptions.

> Ein großer Teil der Libs benötigt die dynamische Speicherverwaltung.
> Das ist auf den kleinen 8Bittern recht unpraktikabel.
> Womit dann schon mal ein Grund für die Abwesenheit gefunden wäre.
>
> Auch Exceptions sind auf den 8Bittern eher eine Qual.

Ich hab ja nicht behauptet, es gebe keinen Grund dafür. Nur dass es eben 
so ist und damit der Funktionsumfang einer spezifischen g++-Version doch 
nicht unbedingt wie oben behauptet auf allen Zielplattformen exakt 
gleich ist.

> Wobei ich mir recht sicher bin, dass man diese im Kompiler aktivieren
> kann, wenn man nur ernstlich will.
> ungetestet

Das Problem ist, dass Exception-Handling ohne Bibliothek (in dem Fall 
libsupc++) nicht funktioniert. Man kann sie im Compiler per -fexceptions 
aktivieren, aber wenn man eine Exception zu werfen versucht (egal von 
welchem Typ), bricht der Linker mit fehlenden Symbolen ab.
Gast #6154409
Lesenswert?

Rolf M. schrieb:
>
> Naja, die mitgelieferte libstdc++ und libsupc++ steht nicht auf allen
> Plattformen in gleichem Maße zur Verfügung. Beim AVR beispielsweise
> fehlt die komplette Standardbibliothek, und exception handling
> funktioniert auch nicht.

 - Das ist aber kein Grund AVR8 oder andere uC nicht mit c++ zu 
programmieren.

 - grosse Teile von std:: existieren schon für AVR8 ...


... weil die "Diskussion" zu c++ hier im Forum regelmässig degeneriert, 
muss
  man die Quellen halt selber suchen.


Stefan ⛄ F. schrieb:

> Stimmt. Ich kann schließlich auch mit einem Bagger zum Brötchen kaufen
> fahren - wenn ich wirklich will.

 ... weil die "Diskussion" zu c++ hier im Forum regelmässig degeneriert,
  schreibe ich hier auch nicht mehr gerne ...
#6154430
Lesenswert?

A. B. schrieb:
> - Das ist aber kein Grund AVR8 oder andere uC nicht mit c++ zu
> programmieren.

Auch das habe ich nicht behauptet!

Ich habe lediglich der folgenden Aussage widersprochen, nicht mehr und 
nicht weniger:

Oliver S. schrieb:
> Alle architekturspezifischen xxx-gcc -Versionen sind vollwertige gccs,
> und können alle das, was die jeweilige gcc-Version halt kann.

Ich habe dafür den avr-gcc einfach nur als Beispiel genannt.
Gast #6154468
Lesenswert?

Rolf M. schrieb:
> Ich hab ja nicht behauptet, es gebe keinen Grund dafür. Nur dass es eben
> so ist und damit der Funktionsumfang einer spezifischen g++-Version doch
> nicht unbedingt wie oben behauptet auf allen Zielplattformen exakt
> gleich ist.

Dann bleibts dabei, auch wenn es dir nicht schmeckt:
1. Der Kompiler unterstützt es vollumfänglich
2. Die mitgelieferten Libraries leider nicht.

A. B. schrieb:
> weil die "Diskussion" zu c++ hier im Forum regelmässig degeneriert

Ach, es gibt hier ein paar Priester der eigenen Geschmacksrichtung. Was 
ja eigentlich nicht schlecht ist. Allerdings neigen einige dazu 
andersartige Geschmacksrichtungen abzuwerten, zu verteufeln.
Naja... Wenns der Erhöhung der eigenen Person dienlich ist, von mir 
aus...
Aber nerven tuts schon.

A. B. schrieb:
> - Das ist aber kein Grund AVR8 oder andere uC nicht mit c++ zu
> programmieren.

Naja.. Wenn man denn templates und OOP nun gar nicht versteht und 
dagegen eine abgrundtiefe Abneigung entwickelt hat, dann ist das schon 
ein Grund auf C++ zu  verzichten und stattdessen Basic, C, ASM oder was 
auch immer, zu verwenden.
Aber sich deswegen zum Priester aufblasen zu wollen, ist doch irgendwie 
auch ziemlich Banane.
Der Priester der Beschränktheit.
#6154486
Lesenswert?

Arduino Fanboy D. schrieb:
> Dann bleibts dabei, auch wenn es dir nicht schmeckt:
> 1. Der Kompiler unterstützt es vollumfänglich
> 2. Die mitgelieferten Libraries leider nicht.

Das hat nichts mit "schmecken oder nicht schmecken" zu tun. Ich hab's 
jetzt bereits zweimal erklärt, wie meine Aussage zu verstehen ist, 
obwohl sie meiner Meinung nach auch so verständlich genug sein sollte. 
Wenn du es dann immer noch nicht verstehst, dann sei es eben so.
Gast #6154512
Lesenswert?

Rolf M. schrieb:
> obwohl sie meiner Meinung nach auch so verständlich genug sein sollte.
Du differenzierst nicht zwischen Kompiler und Libraries.

Ich schon.
Was mir den Startpunkt liefern kann, um den benötigten Kram 
nachzurüsten. Ohne den Kompiler zu modifizieren.

Wer jetzt recht hat, mit seiner Sicht auf die Dinge, das Urteil, 
überlasse ich lieber anderen...
#6154660
Lesenswert?

Arduino Fanboy D. schrieb:
> Rolf M. schrieb:
>> obwohl sie meiner Meinung nach auch so verständlich genug sein sollte.
> Du differenzierst nicht zwischen Kompiler und Libraries.
>
> Ich schon.

Ich beziehe mich auf das GCC-Paket, zu dem beides gehört.
Das ist ganz einfach: Du installierst einen GCC für x86 und einen der 
gleichen Version für AVR, und du stellst fest, dass der Funktionsumfang 
nicht gleich ist. Schlussfolgerung: Die Aussage, dass er gleich sei, ist 
falsch. Und das war's dann schon. Mehr wollte ich gar nicht sagen.

Ob das nun im Executable des Compilers selbst oder einer mitgelieferten 
Bibliothek begründet ist, spielt dafür keine Rolle. Und es sagt auch 
nichts darüber aus, wie einfach oder kompliziert man diese selbst 
nachbauen kann. Es ist außerdem weder als Wertung zu verstehen, ob man 
auf dem AVR C++ verwenden sollte, noch als Aussage darüber, wie sinnvoll 
oder wichtig diese Funktionalität ist.

> Wer jetzt recht hat, mit seiner Sicht auf die Dinge, das Urteil,
> überlasse ich lieber anderen...

Du hast ja mit allem recht. Es geht aber an meiner Aussage vorbei.
Gast #6154762
Lesenswert?

Rolf M. schrieb:
> Das ist ganz einfach: Du installierst einen GCC für x86 und einen der
> gleichen Version für AVR, und du stellst fest, dass der Funktionsumfang
> nicht gleich ist.

Doch. Wenn du wirklich nur den GCC installierst, ist der Funktionsumfang 
gleich. Wenn du ein Paket aus GCC und Standard Library für x86 
installierst, aber nur den GCC für AVR, ist der Umfang natürlich anders. 
Wenn du irgendwo eine stdlib für den AVR auftreibst und installierst, 
ist der Umfang gleich. Es ist halt nur so, dass Pakete für x86 oder ARM 
praktischerweise die stdlib mitliefern, aber das ist eben nicht mehr nur 
der GCC.
Wenn du ein VW-Auto und einen Mercedes-Motor kaufst, sagst du ja auch 
nicht der Motor vom VW hat mehr Funktionsumfang; du hast nur mehr 
Drumherum zum Motor dazu erworben.

Der GCC-ARM-Embedded unterstützt übrigens Exceptions; nur braucht die 
zugehörige Library so viel Flash und RAM dass das eher unpraktikabel 
ist. Es wäre eine interessante Aufgabe, da eine "Lite" Version für 
Embedded zu basteln. Vielleicht ohne Backtrace-Erzeugung.

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