Adressenreihenfolge

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich wollte mir einen Baustein erstellen, welcher nach einem Bestimmten Schema
bytes vertauscht und von ner Quelle in ein Ziel schreibt.

hatte dazu Pointer von Quelle und Ziel übergeben.
hatte dann irgendwo 2 Integer und ein Byte angelegt.
aber nachdem es nicht funktionierte, stellte ich fest, dass die beiden integer im Speicher hintereinander liegen, das nachfolgend angelegte Byte aber irgendwann vorher im Speicher liegt. Kann man also leider nicht davon ausgehen, dass die Daten in der angelegten Reihenfolge im Speicher liegen?

wenn nicht, wie verhält es sich mit Arrays Structs und e/a daten? Bspw. Ethercat ... Regler DINT, int. ... ?
 
Wieso nutzt du überhaupt Pointer?
Poste doch mal den Code.

Handelt es sich um TwinCAT? Dann kannst du nicht immer davon ausgehen, dass die Daten in einer bestimmten Reinhenfloge im Speicher liegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieso nutzt du überhaupt Pointer?
Poste doch mal den Code.

Handelt es sich um TwinCAT? Dann kannst du nicht immer davon ausgehen, dass die Daten in einer bestimmten Reinhenfloge im Speicher liegen.

Benutze Pointer, weil ich einen Struktur unabhängigen kopierbaustein erstellen wollte.
Der aber nach einem bestimmten Schema kopiert.

Code ist im weitesten Sinne so:

Code:
Pointerdestination^ := PointerSource^;
Pointerdestination := Pointerdestination + 1;

.
.
.
 
Nicht empfohlen

Benutze Pointer, weil ich einen Struktur unabhängigen kopierbaustein erstellen wollte.
Der aber nach einem bestimmten Schema kopiert.

Ich vermute, da sollte so etwas wie eine Template nach C++ Muster entstehen. ST ist eine "alte" Sprache, die solche Konzepte nicht unterstützt.

Über die Lage von Variablen im Speicher kann man nichts konkretes sagen, was bei einer Version geht, kann schon beim nächsten Release ganz anders sein.

Allein bei Arrays kann man davon ausgehen, wo was liegt, wenn man die Adresse des ersten Elements kennt.

Arithmetik mit Pointern sollte man möglichst nicht verwenden, wenn man es kann. Ich verwende so etwas nur bei Arrays z.B. auf Strukturen.
 
Also ich versuche e auch so weit wie möglich zu vermeiden, aber manchmal ist es auch ganz gut. also ich möchte folgendes realisieren:

Ich bekomme über ProfiBus 128 Byte Eingangsdaten zu Verfügung gestellt und muss diese zu 14 Achsen EtherCat umwanbdeln.
Da jetzt aber nicht klar ist, welche Daten über den Bus gesendet werden, also in welchem Format die Daten über den Profibus kommen und in welchem Format ich sie über den Ethercat bus weiter leiten muss, wollte
ich einen Baustein schreiben , welcher universell einsetzbar ist. Als egal welches Format vorliegt einfach die Daten von A Bach B (Profibus nach Etchecat) koppiert.
Hier sollte es unabhängig sein, denn wenn der Kunde die EtherCAT Daten verändert sollte er einfach die datenlänge und die Adresse anpassen und dann sollte es weiter gehen. .... aber keine Programmanpassung mit Strukturen oder so ... ist so etwas möglich?
 
Ok, also ich habe eine Möglichkeit gefunden nur word arrays und ein und Ausgangsdaten zu verwenden.
Hier sollte ja die adressreihenfolge stimmen.
 
Zurück
Oben