2018-07-04 23:01:03 +00:00
|
|
|
/*********************************************************************
|
|
|
|
* SEGGER Microcontroller GmbH & Co. KG *
|
|
|
|
* The Embedded Experts *
|
|
|
|
**********************************************************************
|
|
|
|
* *
|
|
|
|
* (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG *
|
|
|
|
* *
|
|
|
|
* 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 RTT protocol and J-Link. *
|
|
|
|
* *
|
|
|
|
* Redistribution and use in source and binary forms, with or *
|
|
|
|
* without modification, are permitted provided that the following *
|
|
|
|
* conditions are met: *
|
|
|
|
* *
|
|
|
|
* o Redistributions of source code must retain the above copyright *
|
|
|
|
* notice, this list of conditions and the following disclaimer. *
|
|
|
|
* *
|
|
|
|
* o Redistributions in binary form must reproduce the above *
|
|
|
|
* copyright notice, this list of conditions and the following *
|
|
|
|
* disclaimer in the documentation and/or other materials provided *
|
|
|
|
* with the distribution. *
|
|
|
|
* *
|
|
|
|
* o Neither the name of SEGGER Microcontroller GmbH & Co. KG *
|
|
|
|
* nor the names of its contributors may be used to endorse or *
|
|
|
|
* promote products derived from this software without specific *
|
|
|
|
* prior written permission. *
|
|
|
|
* *
|
|
|
|
* 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: V2.42 *
|
|
|
|
* *
|
|
|
|
**********************************************************************
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
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 ****************************/
|