Direkt dargestellte Variablen und deren Lage im Speicher

CuBe
2006-03-15
2006-03-20
  • CuBe - 2006-03-15

    Moin,

    ich suche nach einer (Literatur)Quelle, die mir sagt, dass %M?0 am Anfang des Speichers liegt.

    Heißt:

    Wenn ich eine Variable

    Test AT %MB0 : BYTE;

    deklariere, liegt die dann per Norm am Anfang des Speichers?

    Oder kann der Compiler die frei vergebenen Variablen vor den festen Bereich legen, und dann erst die fest vergebenen einordnen?

    Bzw. gibt es Compiler, die den Speicher der festen Variablen von hinten aufbauen?

    Vielen Dank schonmal für jede Hilfestellung.

    CuBe

     
  • Anonymous - 2006-03-17

    Originally created by: Bernhard Werner

    Hallo CuBe,

    die Norm sagt hierzu gar nichts aus, und man kann auch nicht davon ausgehen. Die Norm sagt nicht einmal etwas dazu wie die Merkeraddressen zueinander in Beziehung stehen.

    Zitat:
    The manufacturer shall specify the correspondence between the direct representation of a variable
    and the physical or logical location of the addressed item in memory, input or output.

    Das ist alles was die Norm zu dem Thema sagt.

    Tatsächlich ist es in CoDeSys (2.3) normalerweise so, dass sich %MB0 vor allen frei vergebenen Variablen befindet. Aber natürlich darf ein Compiler den Merkerbereich auch hinter den frei vergebenen und wenn er will auch mittenrein, oder ganz woandershin (auf ein anderes Speichermedium) legen.

    Bernhard Werner

     
  • CuBe - 2006-03-17

    Danke für die Auskunft.

    Gibt es denn eine sichere Methode die erste Speicherzelle zu Pointern?

    Zur Zeit nutze ich den Merkerbereich, indem ich mir auf %MB0 eine Variable lege, diese aufrufe und mir die Addresse geben lasse:

    Var
    ErsteZelle AT %MB0:BYTE;
    PointerVorne : Pointer to BYTE;
    End_Var
    LD ErsteZelle
    ADR
    ST PointerVorne
    

    Da ich viel Offline Simmuliere, kann ich nicht einfach

    LD 0
    ST PointerVorne
    

    schreiben, da CoDeSys den simmulierten Speicher immer an einer anderen Stelle hat.

     
  • Anonymous - 2006-03-20

    Originally created by: Bernhard Werner

    Hallo CuBe,

    Auf CoDeSys-Systemen passt die Addresse von %MB0 normalerweise schon.

    ld 0

    st pointer

    wird auch auf einer SPS im Normalfall nicht funktionieren, weil der gültige Speicher nie bei 0 beginnt, ausserdem wird auf vielen CoDesys-basierten Systemen (insbesondere SoftSPS) der Speicher auch dynamisch alloziert.

    Aber jetzt müssen Sie mir schon noch erzählen wozu Sie einen Pointer auf den Anfang des Speichers brauchen.

    Bernhard Werner

     

Log in to post a comment.