Mit Struct/EndStruct können benutzerdefinierte Strukturen angelegt werden.
Eine Struktur ist ein aus mehreren verschiedenen Datentypen bestehendes Speicher-Objekt. Es werden die in ihr definierten einzelnen Datentypen strukturiert unter einem einzelnen Namen zusammengefasst.
Deklarierte Strukturen sind innerhalb ihrer Klasse sichtbar. Dies bedeutet, eine im Hauptprogramm (Basisklasse „Avr“) deklarierte Struktur ist innerhalb einer anderen Klasse unbekannt.
struct mystruct_t byte value string text[20] endstruct dim var1 as mystruct_t 'the global structure type dim var2 as myclass.mystruct_t 'the class-internal structure type [...] class myclass struct mystruct_t byte value word id string text[20] endstruct dim var1 as avr.mystruct_t 'the global structure type dim var2 as mystruct_t 'the class-internal structure type [...] endclass
Bevor man eine Struktur im Programm verwenden kann, muss man die Struktur deklarieren. Die Deklaration erfolgt mit Struct/EndStruct. Die Deklaration einer Struktur belegt keinen Speicherplatz. Der Speicherplatz wird erst alloziert, wenn man eine Variable als Struktur mit Dim in einem Speicherbereich (Arbeitsspeicher oder Eeprom) dimensioniert. Eine bereits deklarierte Struktur kann wiederum in einer weiteren Struktur implementiert werden.
Strukturen sind in in sich selbst statisch. Dies bedeutet, dass auch Strings immer eine feste Länge benötigen (wie bei der Dimensionierung im Eeprom). Strukturen belegen bei einer Dimensionierung dann so viele Bytes im Arbeitsspeicher oder Eeprom, wie alle in der Struktur vorhandenen Elemente an Speicherplatz zusammen benötigen.
Die Strukturdeklarationen können auch für eine einfachere Ablage von Daten in Datenobjekten, oder als eine Art Maske für Speicherbereiche verwendet werden. Siehe hierzu: Pointer, Absatz "SuperImpose"
Bei der Zuweisung von Strings/Zeichenketten an String-Elemente von dimensionierten Strukturen werden sie automatisch als Pascal-String gespeichert. D.h. das erste Zeichen im Speicher ist das Längenbyte. Dies bei der Größenangabe in Strukturelementen beachten, die im Arbeitsspeicher dimensioniert werden sollen.
Strukturen können als Array dimensioniert werden, womit Felder mit mehreren Elementen je Array-Element möglich werden.
Beispiel1:
[..] ' Struktur deklarieren struct point byte x byte y endstruct dim a(3) as point ' Array mit 4 Elementen des Typs "point" dimensionieren a(0).x = 1 a(0).y = 20 a(1).x = 23 a(1).y = 42 [..]
Beispiel2:
[..] ' Struktur deklarieren struct buffer byte var(7) string text[4](2) ' String Array mit 3 Elementen endstruct ' Struktur deklarieren struct mydate byte sec byte min byte hour byte month word year buffer buf ' verschachtelte Strukturen möglich string text[12] ' Stringspeicher mit max. 11 Zeichen (1 Länge + 11 Daten) endstruct dim d as mydate ' Struktur dimensionieren d.sec = 23 d.min = 42 d.hour = 12 d.mon = 2 d.year = 2012 d.text = "hello" d.buf.var(4) = 123 d.buf.text(0)="ABC" [..]