Cette fonction copie la zone mémoire définie dans Src dans la zone mémoire définie dans Dest pour la taille définie dans Size. Les deux zones de mémoire peuvent également se chevaucher.
La fonction garantit l'atomicité du transfert, donc la zone mémoire définie dans Dest il a toujours une valeur cohérente même s'il est écrit par une tâche et utilisé par une autre tâche. Il doit être utilisé pour passer des variables supérieures à 4 octets a pour les chaînes d'une tâche à une autre tâche avec une priorité d'exécution plus élevée.
Fonction
CODESYS : eCDSXUnified12Lib
LogicLab : eLLabXUnified12Lib
Description
Dest (PVOID) Adresse de la zone mémoire de destination.
Src (PVOID) Adresse de la zone mémoire source.
Size (UDINT) Taille de la zone mémoire à transférer.
La fonction retourne une variable (PVOID) avec l'adresse de la zone mémoire destination. En cas d'erreur, e est retournéNULL.
Exemples
Comment utiliser les exemples.
Définir la variable à partir du débogage CMove, mémoire Source sera transféré à Destination.
LogicLab (Ptp116)
PROGRAM ST_Sysmemmove
VAR
i : UDINT; (* Auxiliary variable *)
CMove : BOOL; (* Move command *)
Source : ARRAY[ 0..15 ] OF BYTE; (* Source memory *)
Destination : STRING[ 32 ]; (* Destination memory *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_Sysmemmove"
// *****************************************************************************
// By setting the "Move" command the memory is moved
// -----------------------------------------------------------------------------
IF (CMove) THEN
CMove:=FALSE; //Move command
i:=Sysmemmove(ADR(Destination), ADR(Source), SIZEOF(Source));
END_IF;
// [End of file]
CODESYS (Ptp161)
PROGRAM ST_Sysmemmove
VAR
i : UDINT; //Auxiliary variable
CMove : BOOL; //Move command
Source : ARRAY[ 0..15 ] OF BYTE; //Source memory
Destination : STRING[ 32 ]; //Destination memory
END_VAR
// *****************************************************************************
// PROGRAM "ST_Sysmemmove"
// *****************************************************************************
// By setting the "Move" command the memory is moved
// -----------------------------------------------------------------------------
IF (CMove ) THEN
CMove :=FALSE; //Move command
i:=Sysmemmove(ADR(Destination), ADR(Source), SIZEOF(Source));
END_IF;
// [End of file]