123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /*********************************************************************
- * SEGGER Microcontroller GmbH *
- * The Embedded Experts *
- **********************************************************************
- * *
- * (c) 1995 - 2021 SEGGER Microcontroller GmbH *
- * *
- * www.segger.com Support: support@segger.com *
- * *
- **********************************************************************
- * *
- * SEGGER SystemView * Real-time application analysis *
- * *
- **********************************************************************
- * *
- * All rights reserved. *
- * *
- * SEGGER strongly recommends to not make any changes *
- * to or modify the source code of this software in order to stay *
- * compatible with the SystemView and RTT protocol, and J-Link. *
- * *
- * Redistribution and use in source and binary forms, with or *
- * without modification, are permitted provided that the following *
- * condition is met: *
- * *
- * o Redistributions of source code must retain the above copyright *
- * notice, this condition and the following disclaimer. *
- * *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
- * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
- * DAMAGE. *
- * *
- **********************************************************************
- * *
- * SystemView version: 3.32 *
- * *
- **********************************************************************
- ----------------------------------------------------------------------
- File : SEGGER.h
- Purpose : Global types etc & general purpose utility functions
- Revision: $Rev: 18102 $
- ---------------------------END-OF-HEADER------------------------------
- */
- #ifndef SEGGER_H // Guard against multiple inclusion
- #define SEGGER_H
- #include <stdarg.h> // For va_list.
- #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
- #if (defined(__ICCARM__) || defined(__RX) || defined(__ICCRX__))
- //
- // Other known compilers.
- //
- #define INLINE inline
- #else
- #if (defined(_WIN32) && !defined(__clang__))
- //
- // Microsoft VC6 and newer.
- // Force inlining without cost checking.
- //
- #define INLINE __forceinline
- #elif defined(__GNUC__) || defined(__clang__)
- //
- // Force inlining with GCC + clang
- //
- #define INLINE inline __attribute__((always_inline))
- #elif (defined(__CC_ARM))
- //
- // Force inlining with ARMCC (Keil)
- //
- #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))
- #ifndef SEGGER_USE_PARA // Some compiler complain about unused parameters.
- #define SEGGER_USE_PARA(Para) (void)Para // This works for most compilers.
- #endif
- #define SEGGER_ADDR2PTR(Type, Addr) (/*lint -e(923) -e(9078)*/((Type*)((PTR_ADDR)(Addr)))) // Allow cast from address to pointer.
- #define SEGGER_PTR2ADDR(p) (/*lint -e(923) -e(9078)*/((PTR_ADDR)(p))) // Allow cast from pointer to address.
- #define SEGGER_PTR2PTR(Type, p) (/*lint -e(740) -e(826) -e(9079) -e(9087)*/((Type*)(p))) // Allow cast from one pointer type to another (ignore different size).
- #define SEGGER_PTR_DISTANCE(p0, p1) (SEGGER_PTR2ADDR(p0) - SEGGER_PTR2ADDR(p1))
- /*********************************************************************
- *
- * Defines
- *
- **********************************************************************
- */
- #define SEGGER_PRINTF_FLAG_ADJLEFT (1 << 0)
- #define SEGGER_PRINTF_FLAG_SIGNFORCE (1 << 1)
- #define SEGGER_PRINTF_FLAG_SIGNSPACE (1 << 2)
- #define SEGGER_PRINTF_FLAG_PRECEED (1 << 3)
- #define SEGGER_PRINTF_FLAG_ZEROPAD (1 << 4)
- #define SEGGER_PRINTF_FLAG_NEGATIVE (1 << 5)
- /*********************************************************************
- *
- * Types
- *
- **********************************************************************
- */
- typedef struct {
- char* pBuffer;
- int BufferSize;
- int Cnt;
- } SEGGER_BUFFER_DESC;
- typedef struct {
- unsigned 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 long NumBytes); // Optional clean function for cached memory.
- void (*pfInvalidate)(void *p, unsigned long NumBytes); // Optional invalidate function for cached memory.
- } SEGGER_CACHE_CONFIG;
- typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
- struct SEGGER_SNPRINTF_CONTEXT_struct {
- void* pContext; // Application specific context.
- SEGGER_BUFFER_DESC* pBufferDesc; // Buffer descriptor to use for output.
- void (*pfFlush)(SEGGER_SNPRINTF_CONTEXT* pContext); // Callback executed once the buffer is full. Callback decides if the buffer gets cleared to store more or not.
- };
- typedef struct {
- void (*pfStoreChar) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, char c);
- int (*pfPrintUnsigned) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, U32 v, unsigned Base, char Flags, int Width, int Precision);
- int (*pfPrintInt) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, I32 v, unsigned Base, char Flags, int Width, int Precision);
- } SEGGER_PRINTF_API;
- typedef void (*SEGGER_pFormatter)(SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, const SEGGER_PRINTF_API* pApi, va_list* pParamList, char Lead, int Width, int Precision);
- typedef struct SEGGER_PRINTF_FORMATTER {
- struct SEGGER_PRINTF_FORMATTER* pNext; // Pointer to next formatter.
- SEGGER_pFormatter pfFormatter; // Formatter function.
- char Specifier; // Format specifier.
- } SEGGER_PRINTF_FORMATTER;
- typedef struct {
- U32 (*pfGetHPTimestamp)(void); // Mandatory, pfGetHPTimestamp
- int (*pfGetUID) (U8 abUID[16]); // Optional, pfGetUID
- } SEGGER_BSP_API;
- /*********************************************************************
- *
- * Utility functions
- *
- **********************************************************************
- */
- //
- // Memory operations.
- //
- void SEGGER_ARM_memcpy(void* pDest, const void* pSrc, int NumBytes);
- void SEGGER_memcpy (void* pDest, const void* pSrc, unsigned NumBytes);
- void SEGGER_memxor (void* pDest, const void* pSrc, unsigned NumBytes);
- //
- // String functions.
- //
- int SEGGER_atoi (const char* s);
- int SEGGER_isalnum (int c);
- int SEGGER_isalpha (int c);
- unsigned SEGGER_strlen (const char* s);
- int SEGGER_tolower (int c);
- int SEGGER_strcasecmp (const char* sText1, const char* sText2);
- int SEGGER_strncasecmp(const char *sText1, const char *sText2, unsigned Count);
- //
- // Buffer/printf related.
- //
- void SEGGER_StoreChar (SEGGER_BUFFER_DESC* pBufferDesc, char c);
- void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC* pBufferDesc, U32 v, unsigned Base, int Precision);
- void SEGGER_PrintInt (SEGGER_BUFFER_DESC* pBufferDesc, I32 v, unsigned Base, int Precision);
- int SEGGER_snprintf (char* pBuffer, int BufferSize, const char* sFormat, ...);
- int SEGGER_vsnprintf (char* pBuffer, int BufferSize, const char* sFormat, va_list ParamList);
- int SEGGER_vsnprintfEx (SEGGER_SNPRINTF_CONTEXT* pContext, const char* sFormat, va_list ParamList);
- int SEGGER_PRINTF_AddFormatter (SEGGER_PRINTF_FORMATTER* pFormatter, SEGGER_pFormatter pfFormatter, char c);
- void SEGGER_PRINTF_AddDoubleFormatter (void);
- void SEGGER_PRINTF_AddIPFormatter (void);
- void SEGGER_PRINTF_AddBLUEFormatter (void);
- void SEGGER_PRINTF_AddCONNECTFormatter(void);
- void SEGGER_PRINTF_AddSSLFormatter (void);
- void SEGGER_PRINTF_AddSSHFormatter (void);
- void SEGGER_PRINTF_AddHTMLFormatter (void);
- //
- // BSP abstraction API.
- //
- int SEGGER_BSP_GetUID (U8 abUID[16]);
- int SEGGER_BSP_GetUID32(U32* pUID);
- void SEGGER_BSP_SetAPI (const SEGGER_BSP_API* pAPI);
- void SEGGER_BSP_SeedUID (void);
- //
- // Other API.
- //
- void SEGGER_VERSION_GetString(char acText[8], unsigned Version);
- #if defined(__cplusplus)
- } /* Make sure we have C-declarations in C++ programs */
- #endif
- #endif // Avoid multiple inclusion
- /*************************** End of file ****************************/
|