Vai al contenuto

SysGetEndianness, get the system endianness

Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabXUnified12Lib
Libreria Codesys: Non disponibile

La funzione ritorna il tipo di endianness del sistema.

Se sistema Little-Endian, memorizzazione che inizia dal byte meno significativo per finire col più significativo, la funzione ritorna FALSE.

Se sistema Big-Endian, memorizzazione che inizia dal byte più significativo per finire col meno significativo, la funzione ritorna TRUE.

Ecco un esempio di come nel caso di una DWORD (32 bit), il numero esadecimale 0x01234567 viene immagazzinato:

          Little endian             Big endian
+----+----+----+----+ +----+----+----+----+
|0x67|0x45|0x23|0x01| |0x01|0x23|0x45|0x67|
+----+----+----+----+ +----+----+----+----+
Byte: 0 1 2 3 0 1 2 3

Descrizione

Cmd (BOOL) Deve sempre essere TRUE.

La funzione ritorna una variabile (BOOL) con il tipo di endianness del sistema.

Immagine funzione SysGetEndianness

Esempi

Come utilizzare gli esempi.
Viene inviata alla console di spionaggio indicazione sull’endianness del sistema.

LogicLab (Ptp116, ST_SysGetEndianness)
PROGRAM ST_SysGetEndianness
VAR
    TBase: TON; (* Time base *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysGetEndianness"
// *****************************************************************************
// An example to acquire system endianness.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // SYSTEM ENDIANNESS DETECTION
    // -------------------------------------------------------------------------
    // At every second the system endiannes is reported on spy console.

    TBase(IN:=NOT(TBase.Q), PT:=T#1s); //Time base
    IF (TBase.Q) THEN
        IF NOT(SysGetEndianness(TRUE)) THEN
            eTO_JUNK(SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('---'), ADR('Little endian')));
        ELSE
            eTO_JUNK(SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('---'), ADR('Big endian')));
        END_IF;
    END_IF;

// [End of file]

Was this article helpful?