Forum: Mikrocontroller und Digitale Elektronik C++ auf Embedded Features


von Danish B. (danishbelal)


Lesenswert?

Moin :),

ich habe eine C++17 Bibliothek geschrieben, die idealerweise auch im 
Embedded-Umfeld nutzbar sein soll.

Die Vermutung liegt nahe, dass nicht alle C++ Features per se auf 
Embedded Plattformen verfügbar sind.

Ich nutze u.a.
- std::string
- std::ostringstream
- Exceptions (sind optional bzw. deaktivierbar)

Mir steht aktuell keine C++ Toolchain für Embedded zur Verfügung und 
daher wollte ich euch fragen, ob eure Toolchain die o.g. Features 
unterstützt.

Da diese intern ja irgendwie dynamisch Speicher verwalten und nicht jede 
Plattform einen Heap hat habe ich das ungute Gefühl, dass meine Lib für 
Embedded nicht nutzbar ist bzw. umfangreiche Anpassungen nötig sind um 
das zu ändern.

von Slippin J. (gustavo_f)


Lesenswert?

Ich habe zwei Embedded-Systeme. Auf einem wäre sie nutzbar, auf dem 
anderen nicht. ;-)

von Einer K. (Gast)


Lesenswert?

Danish B. schrieb:
> die idealerweise auch im
> Embedded-Umfeld

Wenn du von 32 Bit Maschinchen sprichst, stehen dir sowohl string, als 
auch die iostream Geschichte zur Verfügung ....

Bei den 8Bit, z.B. AVR, kannste das erstmal knicken.
Die ganze LibC++ ist nicht dabei.

von Danish B. (danishbelal)


Lesenswert?

Slippin J. schrieb:
> Ich habe zwei Embedded-Systeme. Auf einem wäre sie nutzbar, auf dem
> anderen nicht. ;-)

Magst du mir auch erzählen um welche Systeme es sich handelt und welche 
Toolchain (gcc?) du nutzt?

Arduino Fanboy D. schrieb:
> Wenn du von 32 Bit Maschinchen sprichst, stehen dir sowohl string, als
> auch die iostream Geschichte zur Verfügung ....
>
> Bei den 8Bit, z.B. AVR, kannste das erstmal knicken.
> Die ganze LibC++ ist nicht dabei.

Damit kann ich leben.  Wenn die ARMs (Cortex M0 ... Cortex A) 
unterstützt werden ist das für mich ausreichend.

von Slippin J. (gustavo_f)


Lesenswert?

Danish B. schrieb:
> Slippin J. schrieb:
>> Ich habe zwei Embedded-Systeme. Auf einem wäre sie nutzbar, auf dem
>> anderen nicht. ;-)
>
> Magst du mir auch erzählen um welche Systeme es sich handelt und welche
> Toolchain (gcc?) du nutzt?

Das eine ist ein ARM mit Linux drauf (gcc-Toolchain). Darauf 
funktioniert deine Lib.
Das ist andere ist ein STM32 mit deaktivierter dynamischer 
Speicherverwaltung. Darauf funktioniert deine Lib nicht.
Beide sind 32 Bit Systeme.

von Pandur S. (jetztnicht)


Lesenswert?

Exceptions sind schoen. Was macht man damit ? Ein "Critical Exception" 
auf den Display zusammen mit "Abort, Cancel, Retry, Continue ?".
zB im Kontrolraum, in der Talstation einer Seilbahn. Der Schluessel fuer 
den Kontrolraum ist beim Chef, vor Ort zwischen 8 und 5, und sonst 
nirgends ?

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Danish B. schrieb:
> Moin :),

Moin, Moin,

> Die Vermutung liegt nahe, dass nicht alle C++ Features per se auf
> Embedded Plattformen verfügbar sind.

Dynamische Speicherverwaltung würde ich in der Regel versuchen, zu 
vermeiden. Kannst Du das nicht anders lösen (String-Typen mit fester 
Länge z.B.)?

Exceptions haben im Embedded Bereich wenig Verwendung. Die benötigten 
Ressourcen stehen in keinen Verhältnis zum Nutzen. Im Embedded Bereich 
hast Du halt selten wirkliche Fehler (die allermeisten Fehlersituationen 
sind bekannt und müssen eh irgend wie bearbeitet werden; der Rest sind 
Hardwarefehler ;-).

> Mir steht aktuell keine C++ Toolchain für Embedded zur Verfügung und
> daher wollte ich euch fragen, ob eure Toolchain die o.g. Features
> unterstützt.

Der gcc kann das sicherlich. Für beide features braucht es eigentlich 
keine besondere Hardware-Unterstützung.

schöne Grüße,
Torsten

von mh (Gast)


Lesenswert?

Torsten R. schrieb:
> Im Embedded Bereich
> hast Du halt selten wirkliche Fehler (die allermeisten Fehlersituationen
> sind bekannt und müssen eh irgend wie bearbeitet werden; der Rest sind
> Hardwarefehler ;-).

Wo ist da der Unterschied zu einer Anwendung auf dem PC? Wenn die 
Exception nicht behandelt wird und der Anwender die Exception zu sehen 
bekommt, hat der Entwickler in den meisten Fällen etwas falsch gemacht.

von A. S. (Gast)


Lesenswert?

mh schrieb:
> Wenn die
> Exception nicht behandelt wird und der Anwender die Exception zu sehen
> bekommt, hat der Entwickler in den meisten Fällen etwas falsch gemacht

Typische Exceptions sind doch, dass Speicherplatz oder eine Datei fehlt. 
Alternativ ein Eingabegerät (Sensor) oder ein Ausgabegerät (Aktor) 
fehlt. Und dann steht das ganze, bis der Benutzer das behebt. Im 
Embedded ist das keine Option.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

mh schrieb:

> Wo ist da der Unterschied zu einer Anwendung auf dem PC? Wenn die
> Exception nicht behandelt wird und der Anwender die Exception zu sehen
> bekommt, hat der Entwickler in den meisten Fällen etwas falsch gemacht.

Der Unterschied liegt meistens in der Komplexität der Applikation. Wenn 
ein Großteil des Codes aus Error-Propagation besteht und / oder Fehler 
nicht lokal handhabbar sind, dann sind Exceptions ein schönes Mittel, 
den Code schlanker zu bekommen.

Fehler kann ich sowohl mit Exceptions, als auch ohne Exceptions 
ignorieren, nicht behandeln etc.

von Olaf (Gast)


Lesenswert?

> Da diese intern ja irgendwie dynamisch Speicher verwalten und nicht jede
> Plattform einen Heap hat habe ich das ungute Gefühl

Geh mal davon aus das du in der Regel keinen Heap haben wirst.

Wieso? Du muesstest dann fest einen Teil des Speicher reservieren
der irgendwie vom Heap genutzt wird. Da ist es dann wesentlich
speichereffizienter wenn man Variablen feste Groessen zuweisst.

Ausser man hat ein komplexes Multitastkingsystem wo unterschiedliche
Tasks nicht immer Speicher brauchen. Dann koennte man die Hoffnung haben
so den Speicher mehrfach nutzen zu koennen.
Allerdings was macht dann ein System wenn der Speicher mal nicht 
verfuegbar
ist? Auf Festplatte auslagern? Ein Fenster aufmachen? Oder doch eher
eine Maschine verschrotten?

Olaf

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.