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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Da ich viel Offline Simmuliere, kann ich nicht einfach
LD0STPointerVorne
schreiben, da CoDeSys den simmulierten Speicher immer an einer anderen Stelle hat.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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.
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
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:
Da ich viel Offline Simmuliere, kann ich nicht einfach
schreiben, da CoDeSys den simmulierten Speicher immer an einer anderen Stelle hat.
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