Data-EndData

Dient der Definition einer objektbasierten Datenstruktur im Programmsegment (Flash).

Syntax:

  • Data Bezeichner [at Adresskonstante]1)
    • Daten
  • EndData
Methoden (nur lesbar)
Name Beschreibung Rückgabetyp
.ByteValue(offset)Byte lesen byte
.WordValue(offset)Word lesen word
.IntegerValue(offset)Integer lesen integer
.LongValue(offset)Long lesen long
.SingleValue(offset)Single lesen single
.StringValue(offset,bytes)String lesen mit Längenvorgabe string
.PString(offset) Pascal-String lesen (Start-Byte ist Länge) string
.CString(offset) C-String lesen (Nullterminiert) string
.Addr Adresse der Datenstruktur im Flash word
.SizeOf Vom Objekt belegte Anzahl Bytes lesen. byte
  • offset: Byte-Position innerhalb der Daten mit Basis Null.
    Anm.: Greift man zu Beispiel auf nacheinanderliegende Word-Daten zu (16-Bit-Werte), dann ist der Offset mit 2 zu multiplizieren.
  • bytes: Anzahl zu lesender Bytes.

Daten an fester Adresse

Das Setzen der Daten ab der angegebenen Word-Adresse im Flash. Eine falsche oder fehlerhafte Adresse wird mit einer Assembler-Fehlermeldung quittiert. Achten sie darauf das es sich hier um eine Word-Adresse handelt, wie z.B. die Bootloaderadresse FIRSTBOOTSTART. Die Byte-Adresse wäre (wordAddresse*2)

Mit dieser Funktionalität ist es möglich Daten an einer ganz bestimmten, festen Position im Programmspeicher (Flash) abzulegen. Wird das kompilierte Programm größer oder gleich dieser Adresse, werden die Daten überschrieben. Daher ist über die Speicherbelegung zu prüfen ob genügend Freiraum vorhanden ist.

Datenablage

Die Direktiven zur Ablage von Daten innerhalb eines Datenobjektes.

  • .db - (byte) 8 Bit Werte inkl. Zeichenketten
  • .dw - (word) 16 Bit Werte
  • .dt - (triple) 24 Bit Werte
  • .dl - (long) 32 Bit Werte

Hinweis
Der Zugriff über die Objektgrenzen hinaus ist möglich und wird nicht geprüft.

SuperImposing

Bei Datenobjekten können Strukturdeklarationen für eine vereinfachte Ablage und auch Zugriff verwendet werden. Siehe hierzu: Pointer, Absatz "SuperImpose"

' Initialisierung
[..]
' Hauptprogramm
dim a as byte
dim s as string
 
a=tabelle1.ByteValue(4)        ' Byte lesen von tabelle1 + 4, Ergebnis: 5
s=tabelle1.CString(11)         ' C-String lesen, Ergebnis: "Hallo"
s=tabelle1.StringValue(11,2)   ' String lesen mit Längenvorgabe: Ergebnis: "Ha"
s=tabelle1.PString(17)         ' Pascal-String lesen, erstes Byte ist Länge(10). Ergebnis: "i love you"
Print "&h"+Hex(tabelle1.Addr)  ' Adresse der Datenstruktur im Flash anzeigen
 
do
loop
 
' Datenstruktur im Flash definieren
data tabelle1
  .db 1,2,3,4,5
  .dw &h4af1,&hcc55,12345
  .db "Hallo",0
  .db 10,"i love you",0
enddata

Strukturen

Daten ablegen anhand einer Strukturdeklaration.

Beispiel:

struct ENTRY
  word  	fnAddr
  string	text[12]
endstruct
 
[..]
 
data table
  ENTRY { myfunc1, "Menu Nr. 1" }
  ENTRY { myfunc2, "Menu Nr. 2" }
  ENTRY { myfunc3, "Menu Nr. 3" }
enddata
1) Setzen an feste Adresse ab 2013.R1