Vai al contenuto
Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabXUnified12Lib
Libreria Codesys: eCDSXUnified12Lib

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.

Immagine funzione Sysmemmove

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]
Was this article helpful?