1 /********************************************************************* 2 * SEGGER Microcontroller GmbH & Co. KG * 3 * The Embedded Experts * 4 ********************************************************************** 5 * * 6 * (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG * 7 * * 8 * www.segger.com Support: support@segger.com * 9 * * 10 ********************************************************************** 11 * * 12 * SEGGER SystemView * Real-time application analysis * 13 * * 14 ********************************************************************** 15 * * 16 * All rights reserved. * 17 * * 18 * SEGGER strongly recommends to not make any changes * 19 * to or modify the source code of this software in order to stay * 20 * compatible with the RTT protocol and J-Link. * 21 * * 22 * Redistribution and use in source and binary forms, with or * 23 * without modification, are permitted provided that the following * 24 * conditions are met: * 25 * * 26 * o Redistributions of source code must retain the above copyright * 27 * notice, this list of conditions and the following disclaimer. * 28 * * 29 * o Redistributions in binary form must reproduce the above * 30 * copyright notice, this list of conditions and the following * 31 * disclaimer in the documentation and/or other materials provided * 32 * with the distribution. * 33 * * 34 * o Neither the name of SEGGER Microcontroller GmbH & Co. KG * 35 * nor the names of its contributors may be used to endorse or * 36 * promote products derived from this software without specific * 37 * prior written permission. * 38 * * 39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * 40 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * 41 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * 42 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 43 * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * 44 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 45 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * 46 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * 47 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * 48 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 49 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * 50 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * 51 * DAMAGE. * 52 * * 53 ********************************************************************** 54 * * 55 * SystemView version: V2.42 * 56 * * 57 ********************************************************************** 58 ---------------------------------------------------------------------- 59 File : SEGGER.h 60 Purpose : Global types etc & general purpose utility functions 61 ---------------------------END-OF-HEADER------------------------------ 62 */ 63 64 #ifndef SEGGER_H // Guard against multiple inclusion 65 #define SEGGER_H 66 67 #include "Global.h" // Type definitions: U8, U16, U32, I8, I16, I32 68 69 #if defined(__cplusplus) 70 extern "C" { /* Make sure we have C-declarations in C++ programs */ 71 #endif 72 73 /********************************************************************* 74 * 75 * Keywords/specifiers 76 * 77 ********************************************************************** 78 */ 79 80 #ifndef INLINE 81 #ifdef _WIN32 82 // 83 // Microsoft VC6 and newer. 84 // Force inlining without cost checking. 85 // 86 #define INLINE __forceinline 87 #else 88 #if (defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) || defined(__RX) || defined(__ICCRX__)) 89 // 90 // Other known compilers. 91 // 92 #define INLINE inline 93 #else 94 // 95 // Unknown compilers. 96 // 97 #define INLINE 98 #endif 99 #endif 100 #endif 101 102 /********************************************************************* 103 * 104 * Function-like macros 105 * 106 ********************************************************************** 107 */ 108 109 #define SEGGER_COUNTOF(a) (sizeof((a))/sizeof((a)[0])) 110 #define SEGGER_MIN(a,b) (((a) < (b)) ? (a) : (b)) 111 #define SEGGER_MAX(a,b) (((a) > (b)) ? (a) : (b)) 112 113 /********************************************************************* 114 * 115 * Types 116 * 117 ********************************************************************** 118 */ 119 120 typedef struct { 121 char *pBuffer; 122 int BufferSize; 123 int Cnt; 124 } SEGGER_BUFFER_DESC; 125 126 typedef struct { 127 int CacheLineSize; // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size. 128 void (*pfDMB) (void); // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed. 129 void (*pfClean) (void *p, unsigned NumBytes); // Optional clean function for cached memory. 130 void (*pfInvalidate)(void *p, unsigned NumBytes); // Optional invalidate function for cached memory. 131 } SEGGER_CACHE_CONFIG; 132 133 /********************************************************************* 134 * 135 * Utility functions 136 * 137 ********************************************************************** 138 */ 139 140 void SEGGER_ARM_memcpy (void *pDest, const void *pSrc, int NumBytes); 141 void SEGGER_memcpy (void *pDest, const void *pSrc, int NumBytes); 142 void SEGGER_memxor (void *pDest, const void *pSrc, unsigned NumBytes); 143 void SEGGER_StoreChar (SEGGER_BUFFER_DESC *p, char c); 144 void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC *pBufferDesc, U32 v, unsigned Base, int NumDigits); 145 void SEGGER_PrintInt (SEGGER_BUFFER_DESC *pBufferDesc, I32 v, unsigned Base, unsigned NumDigits); 146 int SEGGER_snprintf (char *pBuffer, int BufferSize, const char *sFormat, ...); 147 148 149 #if defined(__cplusplus) 150 } /* Make sure we have C-declarations in C++ programs */ 151 #endif 152 153 #endif // Avoid multiple inclusion 154 155 /*************************** End of file ****************************/ 156