Benutzerdefinierte Klassen
In LunaAVR lassen sich eigene Klassen definieren, mit denen Funktionen im Sinne eines Moduls oder einer in sich geschlossenen Bibliothek nachgerüstet werden können.
Eine solche Klasse kann als Bestandteil des Hauptprogramms implementiert werden und ist in sich geschlossen. Dies bedeutet, dass die enthaltenen Komponenten nur durch den Zugriff über den Namen der Klasse erreichbar sind (getrennter Namensraum: „KlassenName.xxx“). Der getrennte Namensraum erlaubt es daher Bezeichner/Namen für die Komponenten zu verwenden, die auch im Hauptprogramm existieren.
Eine Klasse kann folgende Komponenten enthalten:
- Variablen (Arbeitsspeicher & Eeprom)
Die einzelnen Komponenten werden innerhalb der Klasse wie im Hauptprogramm deklariert und sind dann Teil der Klasse.
Syntax
- Class Bezeichner
- Konstantendeklaration
- Definitionen/Aliase
- Strukturdeklaration
- Variablendimensionierung
- Interrupt-Serviceroutinen
- Funktionen und Proceduren
- Datenstrukturen
- EndClass
Anwendung von Klassen im Programmcode
Von Außen sind Zugriffe die Komponenten einer Klasse erlaubt:
- Strukturdeklarationen (zur Dimensionierung)
- Konstanten (lesen)
- Variablen (lesen und schreiben)
- Prozeduren (aufrufen)
- Funktionen (aufrufen)
- Daten (lesen und Ggf. schreiben)
Beispiel
' Initialisierung [..] dim var as single 'Aufruf irgendwo im Programmcode print test.Version ' Ausgabe test.Init() ' Procedure aufrufen var = test.GetData(0,2) ' Funktion aufrufen test.a=123 ' Wert zuweisen print str(test.a) ' Wert lesen und ausgeben ' Hauptschleife do loop ' Deklaration Class test const Version = "1.0" dim a as byte Procedure Init() print "Initialisierung" print "a = "+str(a) EndProc Function GetData(x as byte, y as byte) as single mul y,4 y=y+x return tabelle.SingleValue(y) EndFunc data tabelle .dw &h1234,&h5678,&h9aab .dw &h1234,&h5678,&h9aab .dw &h1234,&h5678,&h9aab .dw &h1234,&h5678,&h9aab enddata EndClass