Data

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mit data werden Informationen in den in den Programmcode integriert.
    Data

    Daten die in einer mit der Direktive DATA eingeleiteten Zeile stehen, werden in den Programmspeicher geschrieben, besser - in den Programmcode integriert. Eine DATA -Zeile muss mindestens ein Element enthalten, mehrere Elemente in einer Zeile werden durch Kommata voneinander getrennt. Damit später auf die Daten zugegriffen werden kann, muss zur Positionsermittlung derselben, den DATA -Zeilen eine Programmmarke, ein Label vorangestellt werden.

    Mein_Label:
    data 1, 2, 4, 8, 16, 32, 64, 128


    Bytekonstanten dezimaler Schreibweise können wie im Beispiel gezeigt eingegeben werden. Alle weiteren Formate, also Konstanten die 2, 4 oder 8 Byte Länge umfassen, und auch Texte, müssen speziell kenntlich gemacht werden (siehe Tabelle), damit der Compiler die Daten ihrem Typ entsprechend in den Programmcode einsetzen kann. Dabei geht es um die Anzahl der Bytes die einer Konstante eingeräumt werden, wie auch um einer ihrem Datentyp entsprechenden Formatierung und Bytefolge. Texte in Datazeilen werden in Anführungszeichen gestellt. Konstanten unterschiedlicher Länge dürfen aufeinander folgen.

    Datentyp Kennung
    ByteOhne
    Word, Integer%
    Long, Dword&
    Single!
    Double#


    data 255, 65535% ,-32768%, -2147483648&, 4294967295&, 1.23!, 2.46#
    data "Das ist ein Text"


    Auch andere unter BASCOM übliche Schreibweisen sind in der Data-Zeile erlaubt.

    data &H01, &B11, &H1AF9%

    Kommt im Programmcode ein End zur Anwendung, müssen die Data -Zeile darunter angeordnet sein. Ohne das End steht es dem Programmierer frei. Dann muss allerdings dafür sorgen getragen werden, dass innerhalb des Programmcodes implementierte Daten nicht vom Controller wie normaler Programmcode durchlaufen werden können.



    Speicherorganisation

    Hier geht es darum zu klären, wie die Daten im Programmspeicher angeordnet werden und warum die Kennung des Datentyps so wichtig ist.

    Gegeben seien folgende Daten:

    data 1 , 2 , 3% , 4% , 8& , 5
    data &H1234


    Die obere Data -Zeile enthält je zwei 8 und 16 Bit Konstanten, gefolgt von einer 4 Byte und einer 1 Byte langen Konstante. Eine weitere Data–Zeile folgt mit einer Konstante bei der, es sei vorweggenommen, dass % Zeichen fehlt.
    Im Programmspeicher werden diese Konstanten in folgender Anordnung gebracht:

    FlashAdr 008Ch :0201 0003 0004 0008 0000 3405 9731 f7f1 9508 9468

    Die Doppelbyte-Darstellung ergibt sich aus folgendem Grund. Der Programmspeicher ist Wort-organisiert, was nichts anderes bedeutet, als das der Speicher unter jeder Adresse 16 Bit = 2Byte = 1Wort breit ist. Dieser Ausschnitt stellt also 20 Bytes bzw. 10 Worte dar. Die letzten 4 Worte, also ab Adresse 0092h sind Teil des eigentlichen Programms, also Operationscode und soll an dieser Stelle ignoriert werden. Die Speicherung der Daten im Programmspeicher erfolgt immer gemäß der Reihenfolge, wie sie in den Data –Zeilen auftreten. Darüber hinaus ist bei den 16Bit Konstanten 3% und 4% auch zu erkennen, dass das Low-Byte zuerst abgelegt ist. Diese Speicherregel wird auch Little-Endian genannt und besagt, dass stets das niederste Byte auf der niedrigsten Speicherstelle steht, was im Übrigen auch für das SRAM gilt.
    Im Bewusstsein, dass die ersten zwei Konstanten 1 und 2 als 8 Bit-Konstanten ausgelegt sind, könnte man bei der Betrachtung des Programmspeicherinhaltes schnell vermuten, dass es sich hierbei um einen Fehler handeln könnte. Die Konstante 1 liegt jedoch im LOW-Byte, die 2 im High-Byte des Programmspeicherwortes. Byte-Konstanten werden also zu einem Wort zusammengefasst.
    Durch data &H1234 mit dem fehlenden %, wird nur das Low-Byte im Programmspeicher abgelegt, nämlich 34h und das High-Byte der vermeintlichen 16 Bit-Kontante wird ignoriert.


    $Data


    Nach dem Kommando $Data bindet der Compiler alle nachfolgenden DATA-Zeilen in das Programm ein.

    Alternativ kann der Compiler ein File (*.eep) für das EEPROM erzeugen, wenn die Daten dort abgelegt werden sollen. Für diesen Fall muss den Data-Zeilen die Direktive $EEPROM vorangestellt werden. Folgen im Anschluss weitere DATA-Zeilen die wiederum für den Programmspeicher bestimmt sind, muss ihnen erneut der Ausdruck $Data vorangestellt werden. Standardmäßig werden jedoch alle DATA-Zeilen auf den Programmspeicher bezogen, sodass $Data nicht zwingend notwendig ist.
    $Data und $EEprom bilden also eine Umschaltmöglichkeit, für welchen Speicher die Daten gedacht sind.

    'ein Beispiel------------------------------------------------


    FlashDaten1:
    Data 11, 22, 33, 44, 55 '
    Daten für den Programmspeicher

    $eeprom 'Folgende Daten sind für das EEprom bestimmt

    EEP_Daten:
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8


    $Data 'Kommende Daten sind für den Programmspeicher

    FlashDaten2:
    Data 0, 8, 15, 47, 1

    470 mal gelesen