Questa funzione copia l’area di memoria definita in Src nell’area di memoria definita in Dest per la dimensione definita in Size. Le due aree di memoria possono anche sovrapporsi.
La funzione garantisce l’atomicità del trasferimento, quindi l’area di memoria definita in Dest ha sempre valore coerente anche se scritta da una task ed utilizzata da un’altra task. Deve essere utilizzata per passare variabili di dimensione superiore ai 4 bytes a per le stringhe da una task verso un’altra task a priorità di esecuzione superiore.
Descrizione
Dest (PVOID) Indirizzo dell’area di memoria di destinazione.
Src (PVOID) Indirizzo dell’area di memoria di origine.
Size (UDINT) Dimensione area di memoria da trasferire.
La funzione ritorna una variabile (PVOID) con l’indirizzo dell’area di memoria di destinazione. In caso di errore viene ritornato eNULL.

Esempi
Come utilizzare gli esempi.
Settando da debug la variabile CMove, la memoria Source sarà traferita in Destination.
LogicLab (Ptp116, ST_Sysmemmove)
PROGRAM ST_Sysmemmove
VAR
CMove : BOOL; (* Move command *)
Result : PVOID; (* Function result *)
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
Result:=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]