/********************************************************************* * SEGGER Microcontroller GmbH & Co. KG * * The Embedded Experts * ********************************************************************** * * * (c) 1995 - 2017 SEGGER Microcontroller GmbH & Co. KG * * * * Internet: segger.com Support: support_embos@segger.com * * * ********************************************************************** * * * embOS * Real time operating system for microcontrollers * * * * Please note: * * * * Knowledge of this file may under no circumstances * * be used to write a similar product or a real-time * * operating system for in-house use. * * * * Thank you for your fairness ! * * * ********************************************************************** * * * OS version: 4.34.1 * * * ********************************************************************** ---------------------------------------------------------------------- File : SEGGER.h Purpose : Global types etc & general purpose utility functions ---------------------------END-OF-HEADER------------------------------ */ #ifndef SEGGER_H // Guard against multiple inclusion #define SEGGER_H #include "Global.h" // Type definitions: U8, U16, U32, I8, I16, I32 #if defined(__cplusplus) extern "C" { /* Make sure we have C-declarations in C++ programs */ #endif /********************************************************************* * * Keywords/specifiers * ********************************************************************** */ #ifndef INLINE #ifdef _WIN32 // // Microsoft VC6 and newer. // Force inlining without cost checking. // #define INLINE __forceinline #else #if (defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) || defined(__RX) || defined(__ICCRX__)) // // Other known compilers. // #define INLINE inline #else // // Unknown compilers. // #define INLINE #endif #endif #endif /********************************************************************* * * Function-like macros * ********************************************************************** */ #define SEGGER_COUNTOF(a) (sizeof((a))/sizeof((a)[0])) #define SEGGER_MIN(a,b) (((a) < (b)) ? (a) : (b)) #define SEGGER_MAX(a,b) (((a) > (b)) ? (a) : (b)) /********************************************************************* * * Types * ********************************************************************** */ typedef struct { char *pBuffer; int BufferSize; int Cnt; } SEGGER_BUFFER_DESC; typedef struct { int CacheLineSize; // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size. void (*pfDMB) (void); // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed. void (*pfClean) (void *p, unsigned NumBytes); // Optional clean function for cached memory. void (*pfInvalidate)(void *p, unsigned NumBytes); // Optional invalidate function for cached memory. } SEGGER_CACHE_CONFIG; /********************************************************************* * * Utility functions * ********************************************************************** */ void SEGGER_ARM_memcpy (void *pDest, const void *pSrc, int NumBytes); void SEGGER_memcpy (void *pDest, const void *pSrc, int NumBytes); void SEGGER_memxor (void *pDest, const void *pSrc, unsigned NumBytes); void SEGGER_StoreChar (SEGGER_BUFFER_DESC *p, char c); void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC *pBufferDesc, U32 v, unsigned Base, int NumDigits); void SEGGER_PrintInt (SEGGER_BUFFER_DESC *pBufferDesc, I32 v, unsigned Base, unsigned NumDigits); int SEGGER_snprintf (char *pBuffer, int BufferSize, const char *sFormat, ...); #if defined(__cplusplus) } /* Make sure we have C-declarations in C++ programs */ #endif #endif // Avoid multiple inclusion /*************************** End of file ****************************/