Forum: Compiler & IDEs C++ Toolchain AVR


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, ich komme aus der (Software)Ecke C++, nun will ich mich mit 
Mikrocontrollern befassen. Das AVRGCC Tutorial ist in C geschrieben, da 
ich den Code im Tutorial gut nachvollziehen kann und eigentlich bei C++ 
bleiben will, meine Frage: Gibt es eine vernünftige C++ Toolchain für 
AVRs?

: Verschoben durch Moderator
von Bernd K. (prof7bit)


Bewertung
3 lesenswert
nicht lesenswert
Wenn Du aus der Softwareecke kommst müsstest Du doch wissen daß der gcc 
auch C++ kann.

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
3 lesenswert
nicht lesenswert
Der AVR-GCC unterstützt C++. Leider wird aber keine C++ Standard Library 
mitgeliefert, weshalb das nicht so viel Spaß macht. Wenn du einen ARM 
Cortex-M Mikrocontroller, wie z.B. einen STM32 nutzt - was ohnehin 
keine schlechte Idee ist, da zukunftsweisender - kannst du den
ARM GCC nehmen, mit welchem C++ recht problemlos geht.

: Bearbeitet durch User
von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Niklas G. schrieb:
> Der AVR-GCC unterstützt C++. Leider wird aber keine C++ Standard Library
> mitgeliefert, weshalb das nicht so viel Spaß macht.

Erstmal danke. Damit könnte ich leben.





Niklas G. schrieb:
> Wenn du einen ARM
> Cortex-M Mikrocontroller, wie z.B. einen STM32 nutzt

Habe mir einige Tutorials durchgesehen, auf den ersten Blick sieht ARM 
sehr sehr viel komplexer aus vom Code her, man muss wesentlich mehr 
schreiben (was kein KO-Kriterium ist). Ist das sinnvoll für nen Neuling 
in der Mikrocontroller Welt?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Die auch auf 8-Bit-AVRs erfolgreiche Arduino-Umgebung selbst verwendet 
C++, also auch der Code in den ominösen *.ino-Dateien.

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
R.Siegmann schrieb:
> Erstmal danke. Damit könnte ich leben.
Okay... Mich stört es schon, dass selbst so Dinge die nichts mit der 
Laufzeit zu tun haben, wie std::integer_sequence oder 
std::numeric_limits, nicht verfügbar sind. Es ließe sich irgendwie 
umgehen, aber schön ist das nicht :-)

R.Siegmann schrieb:
> Ist das sinnvoll für nen Neuling
> in der Mikrocontroller Welt?
Da du ja schon Programmier-Erfahrung hast, könnte es durchaus gehen. Der 
Vorteil ist, dass du so direkt eine leistungsfähige Plattform lernst und 
nicht später umlernen musst. Es gibt ja auch viele Bibliotheken, die 
einem die Details abnehmen, wie die "Cube" Libraries bei STM32.

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
R.Siegmann schrieb:
> sieht ARM sehr sehr viel komplexer aus vom Code her, man muss wesentlich
> mehr schreiben

Kein bisschen. Sobald man mehr als Hello World macht treten die 12 
Zeilen mehr für die Initialisierungen der Hardware komplett in die 
Bedeutungslosigkeit.

von Rolf M. (rmagnus)


Bewertung
-1 lesenswert
nicht lesenswert
Bernd K. schrieb:
> R.Siegmann schrieb:
>> sieht ARM sehr sehr viel komplexer aus vom Code her, man muss wesentlich
>> mehr schreiben
>
> Kein bisschen. Sobald man mehr als Hello World macht treten die 12
> Zeilen mehr für die Initialisierungen der Hardware komplett in die
> Bedeutungslosigkeit.

12 Zeilen braucht man ja schon fast, um einen einzelnen I/O-Pin ans 
Laufen zu bekommen. Die Hardware ist schon erheblich komplexer als bei 
einem AVR.

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
2 lesenswert
nicht lesenswert
Rolf M. schrieb:
> 12 Zeilen braucht man ja schon fast, um einen einzelnen I/O-Pin ans
> Laufen zu bekommen.

Ich kanns kürzer!
1
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
2
GPIOA->CRL = (GPIOA->CRL & ~(GPIO_CRL_MODE0|GPIO_CRL_CNF0)) | GPIO_CRL_MODE0_1;
3
GPIOA->BSRR = GPIO_BSRR_BS0;
Genau 1 mehr als beim AVR...

von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
>> R.Siegmann schrieb:
>>> sieht ARM sehr sehr viel komplexer aus vom Code her, man muss wesentlich
>>> mehr schreiben
>>
>> Kein bisschen. Sobald man mehr als Hello World macht treten die 12
>> Zeilen mehr für die Initialisierungen der Hardware komplett in die
>> Bedeutungslosigkeit.
>
> 12 Zeilen braucht man ja schon fast, um einen einzelnen I/O-Pin ans
> Laufen zu bekommen. Die Hardware ist schon erheblich komplexer als bei
> einem AVR.

Schau mer mal was ich so an Tutorials finde, davon mache ich es 
abhängig. Für den Anfang bin ich immer ersteinmal an schnellen 
Ergebnissen interessiert, danach kanns gerne detaillierter werden.

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert
Quick and dirty geht es wie schon genannt mit Arduino, auf AVR, einigen 
STM32 und ESP. Das ist aber ein Gemisch aus Prozeduren und OO, IO Pins 
werden mit Prozeduren wie digitalWrite(Pin) bedient und SPI z.B. ist ein 
Objekt.
Ich benutze lieber mbed, da sind alle Komponenten in Klassen gekapselt. 
Das gibt es aber nur für Cortex-M weil es von ARM selber gepflegt wird.
Die Cortex-M gibt es in allen möglichen Grössen, deshalb reichen mir die 
für meine Projekte. Die grossen haben soviel Flash und RAM das sogar ein 
cout << "Hello world" geht. Das ist natürlich nicht unbedingt sinnvoll, 
aber z.B. ein GUI mit Display möchte ich nie mehr in C bauen.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Niklas G. schrieb:
> Ich kanns kürzer!

Gut, aber um diese Zeilen zu verstehen, muss man wesentlich mehr lesen. 
Alleine dass man für jede Peripherie erstmal den Takt einschalten (und 
dabei richtig konfigurieren) muss, mach es schon merklich komplexer.

von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also wenn ihr ein gutes wirklich Anfängertaugliches Tutorial mit Cube 
und HAL kennt, wäre ich dem sehr zugeneigt. Die SPL ist lt. dem ARM 
Artikel dieser Seite veraltet.

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert
Also der magische Würfel ist jetzt aber so ziemlich das genaue Gegenteil 
von C++ Entwicklung...
Wenn man es installiert bekommt man ein Programm mit einer Startseite 
die gross 3 Funktionen anbietet: New Project - Load Project - Help. Da 
fängt man mit Hilfe an und rate mal was sich öffnet.

: Bearbeitet durch User
von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
R.Siegmann schrieb:
>  Die SPL ist lt. dem ARM
> Artikel dieser Seite veraltet.

Dann korrigiere ich meine Aussage mal:
Wenn ihr ein gutes wirklich Anfängertaugliches C++ Tutorial für ARM 
kennt wäre ich dem sehr zugeneigt. Wäre einfach super bei meiner Suche 
Unterstützung zu haben.

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
R.Siegmann schrieb:
> Wenn ihr ein gutes wirklich Anfängertaugliches C++ Tutorial für ARM
> kennt

Was meinst du mit C++ Tutorial? Eines, welches allgemein C++ erläutert? 
Da kannst du jedes normale C++ Buch verwenden.
Eines, welches explizit C++-API's verwendet um die STM32-Peripherie 
anzusteuern? Da gibt es keines, weil es kein wirklich etabliertes 
umfängliches C++-API gibt. Man verwendet meist die C-API's.
Eines, welches C so verwendet, dass man den Code auch in C++-Projekte 
einbinden kann? Das gilt für alle C-basierten Tutorials.
Das ist übrigens beim AVR genau so. Im Embedded Bereich ist C++ leider 
nicht sehr verbreitet.

von R.Siegmann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dann ein Anfängertaugliches C-Tutorial für STM32, dann muss ich das halt 
nach C++ übertragen.

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert
irgendein STM32 Nucleo Board mit 'mbed enabled' besorgen, mbed-cli 
installieren, Beispiel
https://github.com/ARMmbed/mbed-os-example-blinky/blob/master/main.cpp
importieren, kompilieren,
https://github.com/ARMmbed/mbed-os-example-blinky
binary auf das Board kopieren, läuft. C++ Code nach belieben hinzufügen.

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Da das mit C++ hier ja immer wieder Thema ist, werfe ich mal diesen 
Thread ein:

Beitrag "C++ auf einem MC, wie geht das?"

von MitLeserin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
R.Siegmann schrieb:
> Gibt es eine vernünftige C++ Toolchain für
> AVRs?

Für AtmelStudio ist eine avr-gcc-Toolchain verfügbar,
aktuelle Version: 8.0.1

Beitrag "Re: constexpr in Atmel Studio nicht verfügbar?"

Für Eclipse ist eine gnu-mcu-eclipse-arm-none-eabi-gcc-Toolchain 
verfügbar,
aktuelle Version: 7.3.1-1.1

Beitrag "Re: STM32/ CUBE / Free IDE mit C++"

Eine C++ hardware abstraction library für Microcontroller ist verfügbar,
letzte Erweiterung 13.09.2018

https://github.com/KonstantinChizhov/Mcucpp

für AVR8, Stm32 und MCP430 Mikrokonttroller.

*********************

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.