Man kann im C/C++ auch eigene Typen und Strukturen definieren.
Das geht mit typedef und struct.
Beispiel:
typedef struct { byte stack[stackSize]; // Laufvariable des Ringspeichers byte index; } sStack;
Wie das genauer geht, könnt ihr jedem guten C/C++ Tutorial entnehmen. Aber freut euch nicht zu früh, denn ganz so einfach ist das im Arduino dann doch nicht. Zwar basierd Arduino auf WinAVR und damit auf einem GCC Kompiler aber leider ist es beim Arduino nicht so ohne weiteres möglich, eigene Strukturen und Typen zu definieren.
Grund dafür ist die Art, wie Arduino die erforderliche *.cpp Datei erstellt. Diese wird aus der ino Datei generiert. Jetzt müssen wir etwas tiefer in C/C++ einsteigen. Eigentlich gehört zu je Implementationsdatei auch eine Definitionsdatei. D.h. will man Symbole, Funktionen, eigenen Datentypen, Konstanten und sowas global benutzen, werden diese normalerweise in einer Headerdatei geschrieben und dann per Include überall dort eingebunden, wo Sie benötigt werden.
Beim Arduino muss das auch passieren. Da aber die internen Funktionen eigentlich nur in der ino Datei (In der Hauptdatei des Sketches) vorkommen können, wird keine extra Headerdatei generiert, sondern die Definitionen am Anfang der CPP Datei eingefügt, also noch bevor der eigene Text anfängt, allerdings schon nach den eigenen Includes. Dort werden dann auch die noch fehlenden aber benötigen Includes auf die Standartbibliotheken gemacht.
Wenn man nun den o.e. typedef macht, ist das leider für die Übergabe als Parameter zu spät. Denn die Header der Funktionen stehen davor und der Compiler will dann auch vorher schon die Definition geladen haben. Abhilfe schafft da, wenn man diese Definitionen in eine eigene Headerdatei auslagert. (Wie man eine eigene Headerdatei anlegt, haben wir Hier schon gezeigt.)
Dabei gibt es dann nur noch ein kleines Problem. Es stehen dann die Datentypen von Arduino selber nicht mehr zur Verfügung. Also z.B. byte oder word. Diese muss man dann selber definieren, bzw. die Definition aus den Arduinoquelle abschreiben.
typedef unsigned char byte; typedef unsigned int word;