Forum: Compiler & IDEs C++ Toolchain AVR


von R.Siegmann (Gast)


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 User
von Bernd K. (prof7bit)


Lesenswert?

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

von Niklas G. (erlkoenig) Benutzerseite


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)


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) Benutzerseite


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


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)


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)


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


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)


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. (Gast)


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)


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)


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. (Gast)


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.

von R.Siegmann (Gast)


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


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)


Lesenswert?

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

von Johannes S. (Gast)


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)


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)


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.

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

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.