C++ 11 für Atmel Prozessoren

Der C++ 11 Standard bringt einige neuen Features mit, die Code lesbarer und weniger fehlerträchtig machen. Warum nicht auch im embedded Bereich damit arbeiten ? Also habe ich mit einer C++11 Header only (naja – fast) Bibliothek angefangen.

Jetzt werden die Ersten sagen, gibt es schon! Ihr habt wahrscheinlich recht, aber das ist für mich ein Übungs- und Lernprojekt.

Die Bibliothek ist unter https://github.com/saarbastler/AvrLibrary gehostet. Um das Leben etwas einfacher zu machen, habe ich ein Template Generator geschrieben: https://github.com/saarbastler/AvrLibraryTemplate , ein Java Programm, das ein Atmel Studio 7 Projekt als Start generiert.

Hier mal ein paar Beispiele:

Ein IO Port- Pin wird definiert mit:

typedef SABA::PortPin<(SABA::SFRA)&PINB,0> LED;

das geschieht am Besten in der zentralen io_config.h. Um den Port zu bentzten definiert man eine Variable mit dem Typ:

LED led;

Um den Port als Ausgang zu schalten und auch in einem Rutsch auf ‚0‘:

led.asOutput()= false;

.asOutput() schaltet den Portpin als Ausgang und der überladene operator = erwartet ein bool Wert.

Der Compiler generiert daraus zwei Assembler Anweisungen:

sbi 0x04, 0
cbi 0x05, 0

Weitere Beispiele sind in der generierten Datei main.cpp zu finden.

Die Bibliothek und der Generator befinden sich noch in der Entwicklung, daher könnten sich API’s noch ändern. Ich werde demnächst weitere Beispiele vorstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Solve : *
19 + 2 =