Passa al contenuto principale

Sysmemmove, memory move

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​

Immagine funzione Sysmemmove

ParametroTipoDescrizione
DestPVOIDIndirizzo dell'area di memoria di destinazione.
SrcPVOIDIndirizzo dell'area di memoria di origine.
SizeUDINTDimensione area di memoria da trasferire.
OutLa funzione ritorna una variabile (PVOID) con l'indirizzo dell'area di memoria di destinazione. In caso di errore viene ritornato e_NULL_.

Esempi​

Come utilizzare gli esempi.
Settando da debug la variabile CMove, la memoria Source sarà traferita in Destination. Da notare che la dimensione di una variabile stringa è 1 byte più lunga della sua dimensione per contenere il codice "tappo" di terminazione.

LogicLab (Ptp116, ST_Sysmemmove)
PROGRAM ST_Sysmemmove
VAR
CMove : BOOL; (* Move command *)
Result : PVOID; (* Function result *)
Source : STRING[ 16 ] := 'Hello world!'; (* Source memory *)
Destination : ARRAY[0..16] OF BYTE; (* Destination memory *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysmemmove"
// *****************************************************************************
// By setting the "CMove" 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]