- toolkit V2.8.0.1@14806 - BSL V1.8.0.0@14590 - tcpserver: V1.4.3.0@14676 (marshaller V2.4.0.1@14551)
105 lines
4.1 KiB
C
105 lines
4.1 KiB
C
/**************************************************************************************
|
||
Copyright (c) Hilscher Gesellschaft fuer Systemautomation mbH. All Rights Reserved.
|
||
***************************************************************************************
|
||
$HeadURL: https://subversion01/svn/HilscherDefinitions/netXFirmware/Headers/tags/20230403-00/includes/Hil_Compiler.h $: *//*!
|
||
|
||
\file Hil_Compiler.h
|
||
|
||
Definitions of compiler settings.
|
||
|
||
**************************************************************************************/
|
||
#ifndef HIL_COMPILER_H_
|
||
#define HIL_COMPILER_H_
|
||
|
||
#if !defined(USER_COMPILER)
|
||
|
||
/*****************************************************************************/
|
||
/* Set byte alignment for structure members. */
|
||
/*****************************************************************************/
|
||
#if defined(__GNUC__) || defined(__clang__)
|
||
/* support for GNU and clang compiler. Note the clang compiler may also set
|
||
* _MSC_VER, so __clang__ must be checked before _MSC_VER. */
|
||
|
||
#define __HIL_PACKED_PRE
|
||
#define __HIL_PACKED_POST __attribute__((__packed__))
|
||
|
||
/* macro for setting DWORD alignment of a tag's beginning */
|
||
#define __HIL_ALIGNED_DWORD__ __attribute__ ((aligned (4)))
|
||
|
||
#elif defined(_MSC_VER)
|
||
/* support for MS Visual C++ compiler */
|
||
|
||
#if _MSC_VER >= 1000
|
||
#define __HIL_PACKED_PRE
|
||
#define __HIL_PACKED_POST
|
||
#define __HIL_PRAGMA_PACK_ENABLE
|
||
#define __HIL_PRAGMA_PACK_1(label) pack(push, label, 1)
|
||
#define __HIL_PRAGMA_UNPACK_1(label) pack(pop, label)
|
||
#ifndef STRICT
|
||
#define STRICT
|
||
#endif
|
||
#endif
|
||
|
||
#elif defined (__ADS__) || defined (__REALVIEW__)
|
||
/* support for REALVIEW ARM compiler */
|
||
|
||
#define __HIL_PACKED_PRE __packed
|
||
#define __HIL_PACKED_POST
|
||
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
/* Define for variable length arrays at end of structures */
|
||
/*****************************************************************************/
|
||
#if defined(__GNUC__) || defined(__clang__) || defined (__ADS__) || defined (__REALVIEW__)
|
||
/* support for GNU, clang, ADS and REALVIEW ARM compiler. */
|
||
#define __HIL_VARIABLE_LENGTH_ARRAY
|
||
|
||
#elif defined(_MSC_VER)
|
||
/* support for MS Visual C++ compiler */
|
||
|
||
#if _MSC_VER >= 1000
|
||
#define __HIL_VARIABLE_LENGTH_ARRAY 1
|
||
#endif
|
||
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
/* Common used macros */
|
||
/*****************************************************************************/
|
||
/*! For counting the number of array elements */
|
||
#define HIL_CNT_ELEMENT(array) (sizeof(array) / sizeof((array)[0]))
|
||
|
||
/*! Compute the element count of an array to hold a given number of bytes. */
|
||
#define HIL_CALC_ELEMENT_CNT(type, size) (((size) + sizeof(type) - 1)/ sizeof(type))
|
||
|
||
/*! Returns the smaller number of two values */
|
||
#define HIL_MIN(a, b) (((a)<(b))?(a):(b))
|
||
|
||
/*! Returns the bigger number of two values */
|
||
#define HIL_MAX(a, b) (((a)>(b))?(a):(b))
|
||
|
||
/*! Calculates the offset of the given member in a structure, in bytes */
|
||
#define HIL_OFFSETOF(type, member) (((unsigned long)&(((type*)(1))->member)) - 1)
|
||
|
||
/*! Returns the size of the given member of a structure */
|
||
#define HIL_MEMBERSIZE(type, member) (sizeof(((type *)1)->member))
|
||
|
||
/*! Returns the address of the object containing the given member */
|
||
#if defined(__GNUC__) && !defined(_lint)
|
||
/* GNU has the facility to make type check */
|
||
#define HIL_CONTAINEROF(ptr, type, member) \
|
||
({const typeof( ((type *)0)->member ) *__mptr = (ptr);\
|
||
(type *)( (char *)__mptr - HIL_OFFSETOF(type,member));})
|
||
#else
|
||
#define HIL_CONTAINEROF(ptr, type, member) \
|
||
((type *)((char*)(ptr) - HIL_OFFSETOF(type,member)))
|
||
#endif
|
||
|
||
/*****************************************************************************/
|
||
#else
|
||
#include "User_Compiler.h"
|
||
#endif
|
||
|
||
#endif /* HIL_COMPILER_H_ */
|