-
        

Ergebnis 1 bis 5 von 5

Thema: Brett vorm Kopf :-( Overlay

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556

    Brett vorm Kopf :-( Overlay

    Anzeige

    Moin moin allerseits.

    Warum auch immer, ich begreife nicht was es mit dem Overlay Befehl auf sich hat weil ich irgendwie nicht raffe was dort (genau) passiert?

    Das dort je nach Variablentyp mehr oder weniger viele Speicherstellen vom Compiler reserviert werden, kann ich mir vorstellen. Das macht aber jeder Comliler wenn Variablen als byte, word, dwort oder long definiert werden.

    Vorstellen könnt ich mir das beim Zugriff auf eine z,B Wort Variable x mittels Index x(i) auf ein bestimmtes BIt/Byte innerhalb der Variable zugegriffen werden kann (was Sinn machen kann). Nur (wahrscheinlich rauche ich zu viel) Mentol und bekomme Alzheimer?

    Gruß Richard

    Ps.; ab einfachste werde ich es wahrscheinlich in "Pseudo Assemler" raffen.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Per Overlay werden Speicherstellen übereinander gelegt und zwar die ganzen Bytes.

    Beispiel:

    Dim word_variable as word
    dim low_byte as byte at word_variable overlay
    dim high_byte as byte at word_variable+1 overlay

    So hast Du direkt Zugriff auf die zwei Bytes aus denen sich das Word
    zusammensetzt ohne shiften oder typkonvertierung etc.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bascom (und jeder andere Compiler) hat einen Adress-Pointer, wo die nächste Variable hingestellt wird.
    Bei DIM wird dem String "varablenname" diese pointer zugeordnet.
    dann wird der Adress-Pointer um die Länge der Variablen erhöht.
    Durch die Angabe "OVERLAY AT andere-variable" wird dieser Pointer auf den wert von "andere-variable" gesetzt.
    dadurch haben "Variablenname" und "andere-Variable" die gleiche Speicheradresse.
    sonst passiert eigentlich nix. es steckt aber eine Menge drin, wie du als assemblianer dir ja vorstellen kannst.

    http://www.rn-wissen.de/index.php/Ba...cherstrukturen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Da du noch nicht Ahaaa!! gesagt hat, ein weiterer Erklärungsversuch:

    Jede Variable hat ja ihren bestimmten "Platz", dieser Platz hat eine eindeutige "Hausnummer" sinnigerweise auch Adresse genannt.
    Je nach Größe der Variable kann diese einen ganzen Straßenzug belegen.
    Ein Overlay beinhaltet nun EINE Hausnummer und zwar die, bei der begonnen werden soll. Durch die Festlegung der Größe des Overlays (as Byte, as Word usw.) sage ich dem Overlay wieviel Hausnummern ich ab der Starthausnummer haben will. Durch das AT, dort sage ich wo begonnen werden soll.
    Beispiel:

    4 Wordvariablen sollen Byteweise übertragen werden.
    Deshalb wird ein Array aus Bytes erzeugt.
    Die Wordvariablen existieren garnicht, die Daten werden an den gewünschten Stellen ins Array geschrieben.
    Speed_left = 1 und 2
    At Data_array(1) sagt: starte im Array an Position 1
    Dim Speed_left As Word sagt nur 2 Bytes lang!

    Speed_right = 3 und 4
    usw.

    Code:
    Dim Data_array(10) As Byte
    Dim Speed_left As Word At Data_array(1) Overlay
    Dim Speed_right As Word At Data_array(3) Overlay
    Dim Curr_left As Word At Data_array(5) Overlay
    Dim Curr_right As Word At Data_array(7) Overlay
    Die nicht existenten Wordvariablen kann ich aber im Code so behandeln, wie "normale" Wordvariablen

    Günter

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von guenter1604
    Da du noch nicht Ahaaa!!
    Ahaaaa.

    Ist schon klar, mir war nur nicht bewusst das Overly mit einer festen Adresse anfängt. Damit, mit einer festen Startadresse kann man natürlich auf jede weitere Adresse zugreifen.

    Gruß Richard

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •