lib/C/iec_types.h
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Sun, 14 Oct 2018 20:14:13 +0300
changeset 1073 24ef30a9bcee
parent 904 423ea3749212
child 1100 f7cc4f6ce756
permissions -rwxr-xr-x
revert commits improved performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR)

Following commits are reverted:
mjsousa 0b275a2 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- increase hardcoded limit to 499
mjsousa 2228799 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- Add comments!!
mjsousa ce81fa6 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR)"

The reason is that they cause regression in some cases (if function is
used as argument for function block, for example) and this is not
fixed for a long time.
137
9ceda59abd27 Re-organized types headers, to ease debug code generation
etisserant
parents: 59
diff changeset
     1
#ifndef IEC_TYPES_H
9ceda59abd27 Re-organized types headers, to ease debug code generation
etisserant
parents: 59
diff changeset
     2
#define IEC_TYPES_H
9ceda59abd27 Re-organized types headers, to ease debug code generation
etisserant
parents: 59
diff changeset
     3
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     4
#include <limits.h>
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     5
#include <float.h>
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     6
#include <stdint.h>
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     7
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     8
/*********************/
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
     9
/*  IEC Types defs   */
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    10
/*********************/
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    11
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    12
typedef uint8_t  IEC_BOOL;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    13
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    14
typedef int8_t    IEC_SINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    15
typedef int16_t   IEC_INT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    16
typedef int32_t   IEC_DINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    17
typedef int64_t   IEC_LINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    18
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    19
typedef uint8_t    IEC_USINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    20
typedef uint16_t   IEC_UINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    21
typedef uint32_t   IEC_UDINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    22
typedef uint64_t   IEC_ULINT;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    23
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    24
typedef uint8_t    IEC_BYTE;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    25
typedef uint16_t   IEC_WORD;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    26
typedef uint32_t   IEC_DWORD;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    27
typedef uint64_t   IEC_LWORD;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    28
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    29
typedef float    IEC_REAL;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    30
typedef double   IEC_LREAL;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    31
900
1e749c7b70f8 Fix time conversion function in std library, and change into macro (so it may be used in variable initialisations)
mjsousa
parents: 818
diff changeset
    32
/* WARNING: When editing the definition of IEC_TIMESPEC, take note that 
1e749c7b70f8 Fix time conversion function in std library, and change into macro (so it may be used in variable initialisations)
mjsousa
parents: 818
diff changeset
    33
 *          if the order of the two elements 'tv_sec' and 'tv_nsec' is changed, then the macros 
1e749c7b70f8 Fix time conversion function in std library, and change into macro (so it may be used in variable initialisations)
mjsousa
parents: 818
diff changeset
    34
 *          __time_to_timespec() and __tod_to_timespec() will need to be changed accordingly.
1e749c7b70f8 Fix time conversion function in std library, and change into macro (so it may be used in variable initialisations)
mjsousa
parents: 818
diff changeset
    35
 *          (these macros may be found in iec_std_lib.h)
1e749c7b70f8 Fix time conversion function in std library, and change into macro (so it may be used in variable initialisations)
mjsousa
parents: 818
diff changeset
    36
 */
254
28bd86c56793 Initial TIME support in debugger
Edouard Tisserant
parents: 212
diff changeset
    37
typedef struct {
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    38
    long int tv_sec;            /* Seconds.  */
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    39
    long int tv_nsec;           /* Nanoseconds.  */
742
Mario de Sousa <msousa@fe.up.pt>
parents: 741
diff changeset
    40
} /* __attribute__((packed)) */ IEC_TIMESPEC;  /* packed is gcc specific! */
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    41
254
28bd86c56793 Initial TIME support in debugger
Edouard Tisserant
parents: 212
diff changeset
    42
typedef IEC_TIMESPEC IEC_TIME;
28bd86c56793 Initial TIME support in debugger
Edouard Tisserant
parents: 212
diff changeset
    43
typedef IEC_TIMESPEC IEC_DATE;
28bd86c56793 Initial TIME support in debugger
Edouard Tisserant
parents: 212
diff changeset
    44
typedef IEC_TIMESPEC IEC_DT;
28bd86c56793 Initial TIME support in debugger
Edouard Tisserant
parents: 212
diff changeset
    45
typedef IEC_TIMESPEC IEC_TOD;
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    46
161
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    47
#ifndef STR_MAX_LEN
170
e10fbd3707df Disable compiling warnings on Windows
lbessard
parents: 168
diff changeset
    48
#define STR_MAX_LEN 126
161
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    49
#endif
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    50
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    51
#ifndef STR_LEN_TYPE
163
61f65dd6eeb9 Fixed errors in string_to_int.
etisserant
parents: 161
diff changeset
    52
#define STR_LEN_TYPE int8_t
161
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    53
#endif
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    54
818
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    55
#define __INIT_REAL 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    56
#define __INIT_LREAL 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    57
#define __INIT_SINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    58
#define __INIT_INT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    59
#define __INIT_DINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    60
#define __INIT_LINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    61
#define __INIT_USINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    62
#define __INIT_UINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    63
#define __INIT_UDINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    64
#define __INIT_ULINT 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    65
#define __INIT_TIME (TIME){0,0}
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    66
#define __INIT_BOOL 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    67
#define __INIT_BYTE 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    68
#define __INIT_WORD 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    69
#define __INIT_DWORD 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    70
#define __INIT_LWORD 0
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    71
#define __INIT_STRING (STRING){0,""}
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    72
//#define __INIT_WSTRING
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    73
#define __INIT_DATE (DATE){0,0}
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    74
#define __INIT_TOD (TOD){0,0}
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    75
#define __INIT_DT (DT){0,0}
2a3f34967cae Moved __INIT_* defines within type definition headers files
Edouard Tisserant
parents: 742
diff changeset
    76
161
a27957e13d42 STRING max size and length type can now be overloaded (define STR_MAX_LEN and STR_LEN_TYPE before including iec_types.h)
etisserant
parents: 137
diff changeset
    77
typedef STR_LEN_TYPE __strlen_t;
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    78
typedef struct {
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    79
    __strlen_t len;
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    80
    uint8_t body[STR_MAX_LEN];
742
Mario de Sousa <msousa@fe.up.pt>
parents: 741
diff changeset
    81
} /* __attribute__((packed)) */ IEC_STRING;  /* packed is gcc specific! */
59
37ba6f9e51e2 Splitted type declaration out of iec std lib, to avoid DWORD, BOOL, TIME ,... clash with windows.h
etisserant
parents:
diff changeset
    82
137
9ceda59abd27 Re-organized types headers, to ease debug code generation
etisserant
parents: 59
diff changeset
    83
#endif /*IEC_TYPES_H*/