2018-07-04 19:01:03 -04: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 *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- - - - - - - - - - - - - - - - - - - - - - - - - - END - OF - HEADER - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
File : SEGGER_SYSVIEW . h
Purpose : System visualization API .
Revision : $ Rev : 5626 $
*/
# ifndef SEGGER_SYSVIEW_H
# define SEGGER_SYSVIEW_H
/*********************************************************************
*
* # include Section
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
# include "SEGGER.h"
# ifdef __cplusplus
extern " C " {
# endif
/*********************************************************************
*
* Defines , fixed
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
# define SEGGER_SYSVIEW_VERSION 21000
# define SEGGER_SYSVIEW_INFO_SIZE 9 // Minimum size, which has to be reserved for a packet. 1-2 byte of message type, 0-2 byte of payload length, 1-5 bytes of timestamp.
# define SEGGER_SYSVIEW_QUANTA_U32 5 // Maximum number of bytes to encode a U32, should be reserved for each 32-bit value in a packet.
# define SEGGER_SYSVIEW_LOG (0u)
# define SEGGER_SYSVIEW_WARNING (1u)
# define SEGGER_SYSVIEW_ERROR (2u)
# define SEGGER_SYSVIEW_FLAG_APPEND (1u << 6)
# define SEGGER_SYSVIEW_PREPARE_PACKET(p) (p) + 4
//
// SystemView events. First 32 IDs from 0 .. 31 are reserved for these
//
# define SYSVIEW_EVTID_NOP 0 // Dummy packet.
# define SYSVIEW_EVTID_OVERFLOW 1
# define SYSVIEW_EVTID_ISR_ENTER 2
# define SYSVIEW_EVTID_ISR_EXIT 3
# define SYSVIEW_EVTID_TASK_START_EXEC 4
# define SYSVIEW_EVTID_TASK_STOP_EXEC 5
# define SYSVIEW_EVTID_TASK_START_READY 6
# define SYSVIEW_EVTID_TASK_STOP_READY 7
# define SYSVIEW_EVTID_TASK_CREATE 8
# define SYSVIEW_EVTID_TASK_INFO 9
# define SYSVIEW_EVTID_TRACE_START 10
# define SYSVIEW_EVTID_TRACE_STOP 11
# define SYSVIEW_EVTID_SYSTIME_CYCLES 12
# define SYSVIEW_EVTID_SYSTIME_US 13
# define SYSVIEW_EVTID_SYSDESC 14
# define SYSVIEW_EVTID_USER_START 15
# define SYSVIEW_EVTID_USER_STOP 16
# define SYSVIEW_EVTID_IDLE 17
# define SYSVIEW_EVTID_ISR_TO_SCHEDULER 18
# define SYSVIEW_EVTID_TIMER_ENTER 19
# define SYSVIEW_EVTID_TIMER_EXIT 20
# define SYSVIEW_EVTID_STACK_INFO 21
# define SYSVIEW_EVTID_MODULEDESC 22
# define SYSVIEW_EVTID_INIT 24
# define SYSVIEW_EVTID_NAME_RESOURCE 25
# define SYSVIEW_EVTID_PRINT_FORMATTED 26
# define SYSVIEW_EVTID_NUMMODULES 27
# define SYSVIEW_EVTID_END_CALL 28
# define SYSVIEW_EVTID_TASK_TERMINATE 29
# define SYSVIEW_EVTID_EX 31
//
// Event masks to disable/enable events
//
# define SYSVIEW_EVTMASK_NOP (1 << SYSVIEW_EVTID_NOP)
# define SYSVIEW_EVTMASK_OVERFLOW (1 << SYSVIEW_EVTID_OVERFLOW)
# define SYSVIEW_EVTMASK_ISR_ENTER (1 << SYSVIEW_EVTID_ISR_ENTER)
# define SYSVIEW_EVTMASK_ISR_EXIT (1 << SYSVIEW_EVTID_ISR_EXIT)
# define SYSVIEW_EVTMASK_TASK_START_EXEC (1 << SYSVIEW_EVTID_TASK_START_EXEC)
# define SYSVIEW_EVTMASK_TASK_STOP_EXEC (1 << SYSVIEW_EVTID_TASK_STOP_EXEC)
# define SYSVIEW_EVTMASK_TASK_START_READY (1 << SYSVIEW_EVTID_TASK_START_READY)
# define SYSVIEW_EVTMASK_TASK_STOP_READY (1 << SYSVIEW_EVTID_TASK_STOP_READY)
# define SYSVIEW_EVTMASK_TASK_CREATE (1 << SYSVIEW_EVTID_TASK_CREATE)
# define SYSVIEW_EVTMASK_TASK_INFO (1 << SYSVIEW_EVTID_TASK_INFO)
# define SYSVIEW_EVTMASK_TRACE_START (1 << SYSVIEW_EVTID_TRACE_START)
# define SYSVIEW_EVTMASK_TRACE_STOP (1 << SYSVIEW_EVTID_TRACE_STOP)
# define SYSVIEW_EVTMASK_SYSTIME_CYCLES (1 << SYSVIEW_EVTID_SYSTIME_CYCLES)
# define SYSVIEW_EVTMASK_SYSTIME_US (1 << SYSVIEW_EVTID_SYSTIME_US)
# define SYSVIEW_EVTMASK_SYSDESC (1 << SYSVIEW_EVTID_SYSDESC)
# define SYSVIEW_EVTMASK_USER_START (1 << SYSVIEW_EVTID_USER_START)
# define SYSVIEW_EVTMASK_USER_STOP (1 << SYSVIEW_EVTID_USER_STOP)
# define SYSVIEW_EVTMASK_IDLE (1 << SYSVIEW_EVTID_IDLE)
# define SYSVIEW_EVTMASK_ISR_TO_SCHEDULER (1 << SYSVIEW_EVTID_ISR_TO_SCHEDULER)
# define SYSVIEW_EVTMASK_TIMER_ENTER (1 << SYSVIEW_EVTID_TIMER_ENTER)
# define SYSVIEW_EVTMASK_TIMER_EXIT (1 << SYSVIEW_EVTID_TIMER_EXIT)
# define SYSVIEW_EVTMASK_STACK_INFO (1 << SYSVIEW_EVTID_STACK_INFO)
# define SYSVIEW_EVTMASK_MODULEDESC (1 << SYSVIEW_EVTID_MODULEDESC)
# define SYSVIEW_EVTMASK_INIT (1 << SYSVIEW_EVTID_INIT)
# define SYSVIEW_EVTMASK_NAME_RESOURCE (1 << SYSVIEW_EVTID_NAME_RESOURCE)
# define SYSVIEW_EVTMASK_PRINT_FORMATTED (1 << SYSVIEW_EVTID_PRINT_FORMATTED)
# define SYSVIEW_EVTMASK_NUMMODULES (1 << SYSVIEW_EVTID_NUMMODULES)
# define SYSVIEW_EVTMASK_END_CALL (1 << SYSVIEW_EVTID_END_CALL)
# define SYSVIEW_EVTMASK_TASK_TERMINATE (1 << SYSVIEW_EVTID_TASK_TERMINATE)
# define SYSVIEW_EVTMASK_EX (1 << SYSVIEW_EVTID_EX)
# define SYSVIEW_EVTMASK_ALL_INTERRUPTS ( SYSVIEW_EVTMASK_ISR_ENTER \
| SYSVIEW_EVTMASK_ISR_EXIT \
| SYSVIEW_EVTMASK_ISR_TO_SCHEDULER )
# define SYSVIEW_EVTMASK_ALL_TASKS ( SYSVIEW_EVTMASK_TASK_START_EXEC \
| SYSVIEW_EVTMASK_TASK_STOP_EXEC \
| SYSVIEW_EVTMASK_TASK_START_READY \
| SYSVIEW_EVTMASK_TASK_STOP_READY \
| SYSVIEW_EVTMASK_TASK_CREATE \
| SYSVIEW_EVTMASK_TASK_INFO \
| SYSVIEW_EVTMASK_STACK_INFO \
| SYSVIEW_EVTMASK_TASK_TERMINATE )
/*********************************************************************
*
* Structures
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
typedef struct {
U32 TaskID ;
const char * sName ;
U32 Prio ;
U32 StackBase ;
U32 StackSize ;
} SEGGER_SYSVIEW_TASKINFO ;
typedef struct SEGGER_SYSVIEW_MODULE_STRUCT SEGGER_SYSVIEW_MODULE ;
struct SEGGER_SYSVIEW_MODULE_STRUCT {
const char * sModule ;
U32 NumEvents ;
U32 EventOffset ;
void ( * pfSendModuleDesc ) ( void ) ;
SEGGER_SYSVIEW_MODULE * pNext ;
} ;
typedef void ( SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC ) ( void ) ;
/*********************************************************************
*
* API functions
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
typedef struct {
U64 ( * pfGetTime ) ( void ) ;
void ( * pfSendTaskList ) ( void ) ;
} SEGGER_SYSVIEW_OS_API ;
/*********************************************************************
*
* Control and initialization functions
*/
void SEGGER_SYSVIEW_Init ( U32 SysFreq , U32 CPUFreq , const SEGGER_SYSVIEW_OS_API * pOSAPI , SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC pfSendSysDesc ) ;
void SEGGER_SYSVIEW_SetRAMBase ( U32 RAMBaseAddress ) ;
void SEGGER_SYSVIEW_Start ( void ) ;
void SEGGER_SYSVIEW_Stop ( void ) ;
void SEGGER_SYSVIEW_GetSysDesc ( void ) ;
void SEGGER_SYSVIEW_SendTaskList ( void ) ;
void SEGGER_SYSVIEW_SendTaskInfo ( const SEGGER_SYSVIEW_TASKINFO * pInfo ) ;
void SEGGER_SYSVIEW_SendSysDesc ( const char * sSysDesc ) ;
/*********************************************************************
*
* Event recording functions
*/
void SEGGER_SYSVIEW_RecordVoid ( unsigned int EventId ) ;
void SEGGER_SYSVIEW_RecordU32 ( unsigned int EventId , U32 Para0 ) ;
void SEGGER_SYSVIEW_RecordU32x2 ( unsigned int EventId , U32 Para0 , U32 Para1 ) ;
void SEGGER_SYSVIEW_RecordU32x3 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 ) ;
void SEGGER_SYSVIEW_RecordU32x4 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 ) ;
void SEGGER_SYSVIEW_RecordU32x5 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 ) ;
void SEGGER_SYSVIEW_RecordU32x6 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 , U32 Para5 ) ;
void SEGGER_SYSVIEW_RecordU32x7 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 , U32 Para5 , U32 Para6 ) ;
void SEGGER_SYSVIEW_RecordU32x8 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 , U32 Para5 , U32 Para6 , U32 Para7 ) ;
void SEGGER_SYSVIEW_RecordU32x9 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 , U32 Para5 , U32 Para6 , U32 Para7 , U32 Para8 ) ;
void SEGGER_SYSVIEW_RecordU32x10 ( unsigned int EventId , U32 Para0 , U32 Para1 , U32 Para2 , U32 Para3 , U32 Para4 , U32 Para5 , U32 Para6 , U32 Para7 , U32 Para8 , U32 Para9 ) ;
void SEGGER_SYSVIEW_RecordString ( unsigned int EventId , const char * pString ) ;
void SEGGER_SYSVIEW_RecordSystime ( void ) ;
void SEGGER_SYSVIEW_RecordEnterISR ( U32 IrqId ) ;
void SEGGER_SYSVIEW_RecordExitISR ( void ) ;
void SEGGER_SYSVIEW_RecordExitISRToScheduler ( void ) ;
void SEGGER_SYSVIEW_RecordEnterTimer ( U32 TimerId ) ;
void SEGGER_SYSVIEW_RecordExitTimer ( void ) ;
void SEGGER_SYSVIEW_RecordEndCall ( unsigned int EventID ) ;
void SEGGER_SYSVIEW_RecordEndCallU32 ( unsigned int EventID , U32 Para0 ) ;
void SEGGER_SYSVIEW_OnIdle ( void ) ;
void SEGGER_SYSVIEW_OnTaskCreate ( U32 TaskId ) ;
void SEGGER_SYSVIEW_OnTaskTerminate ( U32 TaskId ) ;
void SEGGER_SYSVIEW_OnTaskStartExec ( U32 TaskId ) ;
void SEGGER_SYSVIEW_OnTaskStopExec ( void ) ;
void SEGGER_SYSVIEW_OnTaskStartReady ( U32 TaskId ) ;
void SEGGER_SYSVIEW_OnTaskStopReady ( U32 TaskId , unsigned int Cause ) ;
void SEGGER_SYSVIEW_OnUserStart ( unsigned int UserId ) ; // Start of user defined event (such as a subroutine to profile)
void SEGGER_SYSVIEW_OnUserStop ( unsigned int UserId ) ; // Start of user defined event
void SEGGER_SYSVIEW_NameResource ( U32 ResourceId , const char * sName ) ;
int SEGGER_SYSVIEW_SendPacket ( U8 * pPacket , U8 * pPayloadEnd , unsigned int EventId ) ;
/*********************************************************************
*
* Event parameter encoding functions
*/
U8 * SEGGER_SYSVIEW_EncodeU32 ( U8 * pPayload , U32 Value ) ;
U8 * SEGGER_SYSVIEW_EncodeData ( U8 * pPayload , const char * pSrc , unsigned int Len ) ;
U8 * SEGGER_SYSVIEW_EncodeString ( U8 * pPayload , const char * s , unsigned int MaxLen ) ;
U8 * SEGGER_SYSVIEW_EncodeId ( U8 * pPayload , U32 Id ) ;
U32 SEGGER_SYSVIEW_ShrinkId ( U32 Id ) ;
/*********************************************************************
*
* Middleware module registration
*/
void SEGGER_SYSVIEW_RegisterModule ( SEGGER_SYSVIEW_MODULE * pModule ) ;
void SEGGER_SYSVIEW_RecordModuleDescription ( const SEGGER_SYSVIEW_MODULE * pModule , const char * sDescription ) ;
void SEGGER_SYSVIEW_SendModule ( U8 ModuleId ) ;
void SEGGER_SYSVIEW_SendModuleDescription ( void ) ;
void SEGGER_SYSVIEW_SendNumModules ( void ) ;
/*********************************************************************
*
* printf - Style functions
*/
# ifndef SEGGER_SYSVIEW_EXCLUDE_PRINTF // Define in project to avoid warnings about variable parameter list
void SEGGER_SYSVIEW_PrintfHostEx ( const char * s , U32 Options , . . . ) ;
void SEGGER_SYSVIEW_PrintfTargetEx ( const char * s , U32 Options , . . . ) ;
void SEGGER_SYSVIEW_PrintfHost ( const char * s , . . . ) ;
void SEGGER_SYSVIEW_PrintfTarget ( const char * s , . . . ) ;
void SEGGER_SYSVIEW_WarnfHost ( const char * s , . . . ) ;
void SEGGER_SYSVIEW_WarnfTarget ( const char * s , . . . ) ;
void SEGGER_SYSVIEW_ErrorfHost ( const char * s , . . . ) ;
void SEGGER_SYSVIEW_ErrorfTarget ( const char * s , . . . ) ;
# endif
void SEGGER_SYSVIEW_Print ( const char * s ) ;
void SEGGER_SYSVIEW_Warn ( const char * s ) ;
void SEGGER_SYSVIEW_Error ( const char * s ) ;
/*********************************************************************
*
* Run - time configuration functions
*/
void SEGGER_SYSVIEW_EnableEvents ( U32 EnableMask ) ;
void SEGGER_SYSVIEW_DisableEvents ( U32 DisableMask ) ;
/*********************************************************************
*
* Application - provided functions
*/
void SEGGER_SYSVIEW_Conf ( void ) ;
U32 SEGGER_SYSVIEW_X_GetTimestamp ( void ) ;
U32 SEGGER_SYSVIEW_X_GetInterruptId ( void ) ;
# ifdef __cplusplus
}
# endif
# endif
/*************************** End of file ****************************/