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.

1) false = 0
2) true = <>0