Passa al contenuto principale

SwapData, swap data value

Questa funzione esegue lo swap del valore di variabili, sono gestite operazioni diverse in base alla definizione di Mode. Gli indirizzi di Source e Destination possono coincidere rendendo possibile lo swap sulla variabile stessa.

Approfondimenti

Descrizione​

Immagine F SwapData

ParametroTipoDescrizione
DestinationPVOIDIndirizzo variabile di destinazione.
SourcePVOIDIndirizzo variabile sorgente.
TypeVR_TYPETipo variabile (Vedi definizione).
ModeSWAP_MODEModo swap (Vedi definizione).
OutBOOLFALSE: Errore esecuzione, TRUE: Esecuzione Ok.

Esempi​

Come utilizzare gli esempi.
Nell'esempio sono eseguite alcune operazioni di swap su variabili.

LogicLab (Ptp201, ST_SwapData)
PROGRAM ST_SwapData
VAR
BYData : ARRAY[0..5] OF BYTE; (* Byte data example *)
WDData : ARRAY[0..5] OF WORD; (* Word data example *)
DWData : ARRAY[0..5] OF DWORD; (* DWord data example *)
LWData : ARRAY[0..5] OF LWORD; (* LWord data example *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SwapData"
// *****************************************************************************
// This program shows the use of SwapData function.
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// SOME HALF VARIABLE SWAPS
// -------------------------------------------------------------------------
// BYData[1] Source:=16#12, BYData[2] Destination:=16#21.

BYData[0]:=16#12; //Source
BYData[1]:=16#00; //Destination
eTO_JUNK(SwapData(ADR(BYData[1]), ADR(BYData[0]), BYTE_TYPE, SWAP_HALF));

// WDData[0] Source:=16#1234, WDData[1] Destination:=16#3412.

WDData[0]:=16#1234; //Source
WDData[1]:=16#0000; //Destination
eTO_JUNK(SwapData(ADR(WDData[1]), ADR(WDData[0]), WORD_TYPE, SWAP_HALF));

// DWData[0] Source:=16#12345678, DWData[1] Destination:=16#56781234.

DWData[0]:=16#12345678; //Source
DWData[1]:=16#00000000; //Destination
eTO_JUNK(SwapData(ADR(DWData[1]), ADR(DWData[0]), DWORD_TYPE, SWAP_HALF));

// LWData[0] Source:=16#0123456789ABCDEF, LWData[1] Destination:=16#89ABCDEF01234567.

LWData[0]:=16#0123456789ABCDEF; //Source
LWData[1]:=16#0000000000000000; //Destination
eTO_JUNK(SwapData(ADR(LWData[1]), ADR(LWData[0]), LWORD_TYPE, SWAP_HALF));

// -------------------------------------------------------------------------
// SOME VARIABLE SWAPS
// -------------------------------------------------------------------------
// Before: BYData[2] Source:=16#12, BYData[3] Destination:=16#34.
// After: BYData[2] Source:=16#34, BYData[3] Destination:=16#12.

BYData[2]:=16#12; //Source
BYData[3]:=16#34; //Destination
eTO_JUNK(SwapData(ADR(BYData[3]), ADR(BYData[2]), BYTE_TYPE, SWAP_VARS));

// Before: WDData[2] Source:=16#1234, WDData[3] Destination:=16#5678.
// After: WDData[2] Source:=16#5678, WDData[3] Destination:=16#1234.

WDData[2]:=16#1234; //Source
WDData[3]:=16#5678; //Destination
eTO_JUNK(SwapData(ADR(WDData[3]), ADR(WDData[2]), WORD_TYPE, SWAP_VARS));

// Before: DWData[2] Source:=16#12345678, DWData[3] Destination:=16#56789ABC.
// After: DWData[2] Source:=16#56789ABC, DWData[3] Destination:=16#12345678.

DWData[2]:=16#12345678; //Source
DWData[3]:=16#56789ABC; //Destination
eTO_JUNK(SwapData(ADR(DWData[3]), ADR(DWData[2]), DWORD_TYPE, SWAP_VARS));

// Before: LWData[2] Source:=16#0123456789ABCDEF, LWData[3] Destination:=16#FEDCBA9801234567.
// After: LWData[2] Source:=16#FEDCBA9801234567, LWData[3] Destination:=16#0123456789ABCDEF.

LWData[2]:=16#0123456789ABCDEF; //LWord data example
LWData[3]:=16#FEDCBA9801234567; //LWord data example
eTO_JUNK(SwapData(ADR(LWData[3]), ADR(LWData[2]), LWORD_TYPE, SWAP_VARS));

// -------------------------------------------------------------------------
// SOME ENDIANNESS SWAPS
// -------------------------------------------------------------------------
// BYData[4] Source:=16#12, BYData[5] Destination:=16#12.

BYData[4]:=16#12; //Source
BYData[5]:=16#00; //Destination
eTO_JUNK(SwapData(ADR(BYData[5]), ADR(BYData[4]), BYTE_TYPE, SWAP_ENDIAN));

// WDData[4] Source:=16#1234, WDData[5] Destination:=16#3412.

WDData[4]:=16#1234; //Source
WDData[5]:=16#0000; //Destination
eTO_JUNK(SwapData(ADR(WDData[5]), ADR(WDData[4]), WORD_TYPE, SWAP_ENDIAN));

// DWData[4] Source:=16#12345678, DWData[5] Destination:=16#78563412.

DWData[4]:=16#12345678; //Source
DWData[5]:=16#00000000; //Destination
eTO_JUNK(SwapData(ADR(DWData[5]), ADR(DWData[4]), DWORD_TYPE, SWAP_ENDIAN));

// LWData[4] Source:=16#0123456789ABCDEF, LWData[5] Destination:=16#EFCDAB8967452301.

LWData[4]:=16#0123456789ABCDEF; //Source
LWData[5]:=16#0000000000000000; //Destination
eTO_JUNK(SwapData(ADR(LWData[5]), ADR(LWData[4]), LWORD_TYPE, SWAP_ENDIAN));

// [End of file]