Datentypen
Luna kennt eine Auswahl an numerischen Standard-Datentypen sowie Sonderformen von Datentypen.
Übersicht Datentypen
Name | kleinster Wert | größter Wert | Typ | Größe |
---|---|---|---|---|
Boolean | false1) | true2) | Variable | 1 Byte |
Byte | 0 | 255 | Variable | 1 Byte |
Int8 | -128 | 127 | Variable | 1 Byte |
UInt8 | 0 | 255 | Variable | 1 Byte |
Integer | -32768 | 32767 | Variable | 2 Byte |
Int16 | -32768 | 32767 | Variable | 2 Byte |
Word | 0 | 65535 | Variable | 2 Byte |
UInt16 | 0 | 65535 | Variable | 2 Byte |
Int24 | −8.388.608 | 8.388.607 | Variable | 3 Byte |
UInt24 | 0 | 16.777.215 | Variable | 3 Byte |
Long | 0 | 4.294.967.295 | Variable | 4 Byte |
UInt32 | 0 | 4.294.967.295 | Variable | 4 Byte |
LongInt | −2.147.483.648 | 2.147.483.647 | Variable | 4 Byte |
Int32 | −2.147.483.648 | 2.147.483.647 | Variable | 4 Byte |
Single | –3,402823E38 | +3,402823E38 | Variable | 4 Byte |
String | 0 Zeichen | 254 Zeichen | Objekt-Variable | 2 Byte |
MemoryBlock | nil | MemoryBlock | Objekt-Variable | 2 Byte |
sPtr | 0 | 65.535 | Pointer (Sram) | 2 Byte |
ePtr | 0 | 65.535 | Pointer (Eeprom) | 2 Byte |
dPtr | 0 | 16.777.215 | Pointer (Flash) | 3 Byte |
Benutzerdefiniert | ? | ? | Objekt-Variable | ? |
Siehe auch: Arbeitsspeicher-Variable
Benutzerdefinierte Datentypen
Es können Strukturen als benutzerdefinierte Datentypen deklariert werden.
Siehe hierzu: Struct-EndStruct
Intrinsische Datentypen
Intrinsisch bedeutet, dass der Wert den diese Variablen speichern als eine Adresse auf einen Speicherbereich interpretiert wird. Pointer, Stringvariablen und MemoryBlocks sind daher intrinsische Variablen.
String
Ein String ist eine Kette von beliebigen Zeichen. Jede Art von alphabetischer oder numerischer Informationen kann als Zeichenfolge gespeichert werden. "Heinz Ehrhardt", "13.11.1981", "23.42" sind Beispiele für Strings. In LunaAVR können Strings auch binäre Daten aufnehmen, z.Bsp. Nullbytes.
Im Sourcecode werden Zeichenketten in Anführungsstriche eingebettet. Die maximale Länge eines Strings in LunaAVR beträgt 254 Bytes. Der Standardwert eines Strings ist "" (Leerstring). LunaAVR legt Strings im Pascal-Format, eingebettet in ein MemoryBlock-Objekt ab.
Stringvariablen belegen im Arbeitsspeicher mindestens 2 Bytes (Zeiger auf MemoryBlock-Objekt). Eeprom-Strings jedoch die entsprechend statisch angegebene Anzahl Bytes im Eeprom. Ein als Arbeitsspeicher-Variable deklarierter String ist ein 16-Bit-Pointer auf einen MemoryBlock mit dynamischer Größe.
Stringkonstanten werden im Programmsegement angelegt und belegen dort die Anzahl Bytes der Zeichenkette zuzüglich eines Längenbytes (Pascal-String).
MemoryBlock
Der Datentyp MemoryBlock ist eine direkte Objektreferenz auf ein MemoryBlock-Objekt und ermöglicht dadurch den direkten Zugriff über dessen Methoden und Eigenschaften.
Beispiel einer Variablendeklaration mit verschiedenen Datentypen im Arbeitsspeicher:
dim a as byte dim b,e,f as integer dim var as single dim meinText as String dim m as MemoryBlock a=1 b=12345 var=0.44234 meinText="Dr. Who" m = New MemoryBlock(100)
Pointer
Pointern kommt eine besondere Bedeutung zu: Sie können wie Word-Variablen mit Werten belegt werden und man kann mit ihnen Rechnungen durchführen. Weiterhin sind die Objektfunktionen des MemoryBlocks darauf anwendbar, also beispielsweise p.ByteValue(0) = 0x77 usw.
Da der Controller über drei unterschiedliche Speichersegmente verfügt, wurden auch drei verschiedene Pointer-Typen als neuer Datentyp implementiert. Dies sind:
- sptr: Pointer auf Adressen im Arbeitsspeicher (sram segment)
- dptr: Pointer auf Adressen im Flash (data segment)
- eptr: Pointer auf Adressen im Eeprom (eeprom segment)
Mit Pointern ist es also möglich, auf eine beliebige Adresse, z.Bsp. innerhalb eines MemoryBlocks oder in einer Flash-Tabelle mit den Objektfunktionen zuzugreifen.