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
Wenn Du aus der Softwareecke kommst müsstest Du doch wissen daß der gcc auch C++ kann.
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
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?
Die auch auf 8-Bit-AVRs erfolgreiche Arduino-Umgebung selbst verwendet C++, also auch der Code in den ominösen *.ino-Dateien.
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.
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.
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.
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...
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.
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.
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.
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.
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.
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.
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.
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.
Da das mit C++ hier ja immer wieder Thema ist, werfe ich mal diesen Thread ein: Beitrag "C++ auf einem MC, wie geht das?"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.