feat(sysview): update to version 3.56

This commit is contained in:
Erhan Kurubas
2025-07-08 13:53:08 +02:00
committed by BOT
parent 29ebfeca63
commit eebb363e56
9 changed files with 499 additions and 77 deletions

View File

@@ -10,7 +10,7 @@
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -49,7 +49,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
---------------------------------------------------------------------- ----------------------------------------------------------------------

View File

@@ -8,7 +8,7 @@
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -47,7 +47,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
---------------------------END-OF-HEADER------------------------------ ---------------------------END-OF-HEADER------------------------------
@@ -100,6 +100,10 @@ Revision: $Rev: 25842 $
#define _CORE_HAS_RTT_ASM_SUPPORT 1 #define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1 #define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :); #define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined(__ARM_ARCH_8_1M_MAIN__)) // Cortex-M85
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#else #else
#define _CORE_HAS_RTT_ASM_SUPPORT 0 #define _CORE_HAS_RTT_ASM_SUPPORT 0
#endif #endif
@@ -130,6 +134,10 @@ Revision: $Rev: 25842 $
#define _CORE_HAS_RTT_ASM_SUPPORT 1 #define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1 #define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :); #define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8_1M_MAIN__) // Cortex-M85
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
#define _CORE_NEEDS_DMB 1 #define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :); #define RTT__DMB() __asm volatile ("dmb\n" : : :);
@@ -156,6 +164,10 @@ Revision: $Rev: 25842 $
#define _CORE_HAS_RTT_ASM_SUPPORT 1 #define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1 #define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :); #define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8_1M_MAIN__) // Cortex-M85
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
#define _CORE_NEEDS_DMB 1 #define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :); #define RTT__DMB() __asm volatile ("dmb\n" : : :);
@@ -271,6 +283,7 @@ Revision: $Rev: 25842 $
#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file #ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdint.h>
/********************************************************************* /*********************************************************************
* *
@@ -412,7 +425,7 @@ unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pDa
unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly #define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((uintptr_t)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
/********************************************************************* /*********************************************************************
* *

View File

@@ -3,14 +3,14 @@
* *
* SPDX-License-Identifier: BSD-1-Clause * SPDX-License-Identifier: BSD-1-Clause
* *
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2023-2025 Espressif Systems (Shanghai) CO LTD
*/ */
/********************************************************************* /*********************************************************************
* SEGGER Microcontroller GmbH * * SEGGER Microcontroller GmbH *
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -49,14 +49,14 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW.c File : SEGGER_SYSVIEW.c
Purpose : System visualization API implementation. Purpose : System visualization API implementation.
Revision: $Rev: 28341 $ Revision: $Rev: 29105 $
Additional information: Additional information:
Packet format: Packet format:
@@ -66,10 +66,10 @@ Additional information:
Packets with IDs 24..31 are standard packets with extendible Packets with IDs 24..31 are standard packets with extendible
structure and contain a length field. structure and contain a length field.
<ID><Lenght><Data><TimeStampDelta> <ID><Length><Data><TimeStampDelta>
Packet ID 31 is used for SystemView extended events. Packet ID 31 is used for SystemView extended events.
<ID><Lenght><ID_EX><Data><TimeStampDelta> <ID><Length><ID_EX><Data><TimeStampDelta>
Packets with IDs >= 32 always contain a length field. Packets with IDs >= 32 always contain a length field.
<ID><Length><Data><TimeStampDelta> <ID><Length><Data><TimeStampDelta>
@@ -150,6 +150,7 @@ Additional information:
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <assert.h>
#include "SEGGER_SYSVIEW_Int.h" #include "SEGGER_SYSVIEW_Int.h"
#include "SEGGER_RTT.h" #include "SEGGER_RTT.h"
@@ -188,7 +189,7 @@ Additional information:
// Timestamps may be less than full 32-bits, in which case we need to zero // Timestamps may be less than full 32-bits, in which case we need to zero
// the unused bits to properly handle overflows. // the unused bits to properly handle overflows.
// Note that this is a quite common scenario, as a 32-bit time such as // Note that this is a quite common scenario, as a 32-bit time such as
// SysTick might be scaled down to reduce bandwith // SysTick might be scaled down to reduce bandwidth
// or a 16-bit hardware time might be used. // or a 16-bit hardware time might be used.
#if SEGGER_SYSVIEW_TIMESTAMP_BITS < 32 // Eliminate unused bits in case hardware timestamps are less than 32 bits #if SEGGER_SYSVIEW_TIMESTAMP_BITS < 32 // Eliminate unused bits in case hardware timestamps are less than 32 bits
#define MAKE_DELTA_32BIT(Delta) Delta <<= 32 - SEGGER_SYSVIEW_TIMESTAMP_BITS; \ #define MAKE_DELTA_32BIT(Delta) Delta <<= 32 - SEGGER_SYSVIEW_TIMESTAMP_BITS; \
@@ -388,8 +389,6 @@ static U8 _NumModules;
pDest = pSysviewPointer; \ pDest = pSysviewPointer; \
}; };
#if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 1) #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 1)
static U8 _aPacket[SEGGER_SYSVIEW_MAX_PACKET_SIZE]; static U8 _aPacket[SEGGER_SYSVIEW_MAX_PACKET_SIZE];
@@ -432,6 +431,9 @@ static U8 _aPacket[SEGGER_SYSVIEW_MAX_PACKET_SIZE];
static U8* _EncodeData(U8* pPayload, const char* pSrc, unsigned int NumBytes) { static U8* _EncodeData(U8* pPayload, const char* pSrc, unsigned int NumBytes) {
unsigned int n; unsigned int n;
const U8* p; const U8* p;
// Espressif doesn't support larger packages yet. Encode data length must be less than 255.
assert(NumBytes < 255);
// //
n = 0; n = 0;
p = (const U8*)pSrc; p = (const U8*)pSrc;
@@ -442,8 +444,8 @@ static U8* _EncodeData(U8* pPayload, const char* pSrc, unsigned int NumBytes) {
*pPayload++ = (U8)NumBytes; *pPayload++ = (U8)NumBytes;
} else { } else {
*pPayload++ = 255; *pPayload++ = 255;
*pPayload++ = (NumBytes & 255);
*pPayload++ = ((NumBytes >> 8) & 255); *pPayload++ = ((NumBytes >> 8) & 255);
*pPayload++ = (NumBytes & 255);
} }
while (n < NumBytes) { while (n < NumBytes) {
*pPayload++ = *p++; *pPayload++ = *p++;
@@ -452,6 +454,38 @@ static U8* _EncodeData(U8* pPayload, const char* pSrc, unsigned int NumBytes) {
return pPayload; return pPayload;
} }
/*********************************************************************
*
* _EncodeFloat()
*
* Function description
* Encode a float value in variable-length format.
*
* Parameters
* pPayload - Pointer to where value will be encoded.
* Value - Value to be encoded.
*
* Return value
* Pointer to the byte following the value, i.e. the first free
* byte in the payload and the next position to store payload
* content.
*/
static U8* _EncodeFloat(U8* pPayload, float Value) {
float Val = Value;
U8* pSysviewPointer;
U32* SysViewData;
pSysviewPointer = pPayload;
SysViewData = (U32*)&Val;
while((*SysViewData) > 0x7F) {
*pSysviewPointer++ = (U8)((*SysViewData) | 0x80);
(*SysViewData) >>= 7;
};
*pSysviewPointer++ = (U8)(*SysViewData);
pPayload = pSysviewPointer;
return pPayload;
}
/********************************************************************* /*********************************************************************
* *
* _EncodeStr() * _EncodeStr()
@@ -475,38 +509,42 @@ static U8* _EncodeData(U8* pPayload, const char* pSrc, unsigned int NumBytes) {
* No more than 1 + Limit bytes will be encoded to the payload. * No more than 1 + Limit bytes will be encoded to the payload.
*/ */
static U8 *_EncodeStr(U8 *pPayload, const char *pText, unsigned int Limit) { static U8 *_EncodeStr(U8 *pPayload, const char *pText, unsigned int Limit) {
unsigned int n; U8* pLen;
unsigned int Len; const char* sStart;
//
// Compute string len if (pText == NULL) {
// *pPayload++ = (U8)0;
Len = 0;
if (pText != NULL) {
while(*(pText + Len) != 0) {
Len++;
}
if (Len > Limit) {
Len = Limit;
}
}
//
// Write Len
//
if (Len < 255) {
*pPayload++ = (U8)Len;
} else { } else {
*pPayload++ = 255; sStart = pText; // Remember start of string.
*pPayload++ = (Len & 255); //
*pPayload++ = ((Len >> 8) & 255); // Save space to store count byte(s).
//
pLen = pPayload++;
#if (SEGGER_SYSVIEW_MAX_STRING_LEN >= 255) // Length always encodes in 3 bytes
pPayload += 2;
#endif
//
// Limit string to maximum length and copy into payload buffer.
//
if (Limit > SEGGER_SYSVIEW_MAX_STRING_LEN) {
Limit = SEGGER_SYSVIEW_MAX_STRING_LEN;
}
while ((Limit-- > 0) && (*pText != '\0')) {
*pPayload++ = *pText++;
}
//
// Save string length to buffer.
//
#if (SEGGER_SYSVIEW_MAX_STRING_LEN >= 255) // Length always encodes in 3 bytes
Limit = (unsigned int)(pText - sStart);
*pLen++ = (U8)255;
*pLen++ = (U8)((Limit >> 8) & 255);
*pLen++ = (U8)(Limit & 255);
#else // Length always encodes in 1 byte
*pLen = (U8)(pText - sStart);
#endif
} }
// //
// copy string
//
n = 0;
while (n < Len) {
*pPayload++ = *pText++;
n++;
}
return pPayload; return pPayload;
} }
@@ -693,7 +731,6 @@ static void _SendSyncInfo(void) {
for (n = 0; n < _NumModules; n++) { for (n = 0; n < _NumModules; n++) {
SEGGER_SYSVIEW_SendModule(n); SEGGER_SYSVIEW_SendModule(n);
} }
SEGGER_SYSVIEW_SendModuleDescription();
} }
} }
#endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) #endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1)
@@ -1218,6 +1255,7 @@ static void _VPrintTarget(const char* sFormat, U32 Options, va_list* pParamList)
unsigned int FormatFlags; unsigned int FormatFlags;
unsigned int FieldWidth; unsigned int FieldWidth;
U8* pPayloadStart; U8* pPayloadStart;
const char* s;
#if SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0 #if SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0
RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 1 + 2 * SEGGER_SYSVIEW_QUANTA_U32); RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 1 + 2 * SEGGER_SYSVIEW_QUANTA_U32);
SEGGER_SYSVIEW_LOCK(); SEGGER_SYSVIEW_LOCK();
@@ -1322,6 +1360,20 @@ static void _VPrintTarget(const char* sFormat, U32 Options, va_list* pParamList)
v = va_arg(*pParamList, int); v = va_arg(*pParamList, int);
_PrintUnsigned(&BufferDesc, (unsigned int)v, 16u, NumDigits, FieldWidth, FormatFlags); _PrintUnsigned(&BufferDesc, (unsigned int)v, 16u, NumDigits, FieldWidth, FormatFlags);
break; break;
case 's':
s = va_arg(*pParamList, const char*);
if (s == NULL) {
s = "(null)";
}
do {
c = *s;
s++;
if (c == '\0') {
break;
}
_StoreChar(&BufferDesc, c);
} while (BufferDesc.Cnt < SEGGER_SYSVIEW_MAX_STRING_LEN);
break;
case 'p': case 'p':
v = va_arg(*pParamList, int); v = va_arg(*pParamList, int);
_PrintUnsigned(&BufferDesc, (unsigned int)v, 16u, 8u, 8u, 0u); _PrintUnsigned(&BufferDesc, (unsigned int)v, 16u, 8u, 8u, 0u);
@@ -1954,11 +2006,61 @@ void SEGGER_SYSVIEW_SendTaskInfo(const SEGGER_SYSVIEW_TASKINFO *pInfo) {
ENCODE_U32(pPayload, SHRINK_ID(pInfo->TaskID)); ENCODE_U32(pPayload, SHRINK_ID(pInfo->TaskID));
ENCODE_U32(pPayload, pInfo->StackBase); ENCODE_U32(pPayload, pInfo->StackBase);
ENCODE_U32(pPayload, pInfo->StackSize); ENCODE_U32(pPayload, pInfo->StackSize);
ENCODE_U32(pPayload, 0); // Stack End, future use ENCODE_U32(pPayload, pInfo->StackUsage);
_SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_STACK_INFO); _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_STACK_INFO);
RECORD_END(); RECORD_END();
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_SendStackInfo()
*
* Function description
* Send a Stack Info Packet, containing TaskId for identification,
* stack base, stack size and stack usage.
*
*
* Parameters
* pInfo - Pointer to stack information to send.
*/
void SEGGER_SYSVIEW_SendStackInfo(const SEGGER_SYSVIEW_STACKINFO *pInfo) {
U8* pPayload;
U8* pPayloadStart;
RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32);
//
pPayload = pPayloadStart;
ENCODE_U32(pPayload, SHRINK_ID(pInfo->TaskID));
ENCODE_U32(pPayload, pInfo->StackBase);
ENCODE_U32(pPayload, pInfo->StackSize);
ENCODE_U32(pPayload, pInfo->StackUsage);
RECORD_END();
}
/*********************************************************************
*
* SEGGER_SYSVIEW_SampleData()
*
* Function description
* Send a Data Sample Packet, containing the data Id and the value.
*
*
* Parameters
* pInfo - Pointer to data sample struct to send.
*/
void SEGGER_SYSVIEW_SampleData(const SEGGER_SYSVIEW_DATA_SAMPLE *pInfo) {
U8* pPayload;
U8* pPayloadStart;
RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32);
//
pPayload = pPayloadStart;
ENCODE_U32(pPayload, pInfo->ID);
pPayload = _EncodeFloat(pPayload, *(pInfo->pFloat_Value));
_SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_DATA_SAMPLE);
RECORD_END();
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_SendTaskList() * SEGGER_SYSVIEW_SendTaskList()
@@ -2448,6 +2550,63 @@ void SEGGER_SYSVIEW_NameResource(U32 ResourceId, const char* sName) {
RECORD_END(); RECORD_END();
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_RegisterData()
*
* Function description
* Register data to sample the values via SystemView.
*
* Register functions are usually set in the system description
* callback, to ensure it is only sent when the SystemView Application
* is connected.
*
* Parameters
* pInfo - Struct containing all possible properties that can be sent via this registration event.
*/
void SEGGER_SYSVIEW_RegisterData(SEGGER_SYSVIEW_DATA_REGISTER* pInfo) {
U8* pPayload;
U8* pPayloadStart;
RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 8 * SEGGER_SYSVIEW_QUANTA_U32 + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
//
pPayload = pPayloadStart;
ENCODE_U32(pPayload, SYSVIEW_EVTID_EX_REGISTER_DATA);
ENCODE_U32(pPayload, pInfo->ID);
pPayload = _EncodeStr(pPayload, pInfo->sName, SEGGER_SYSVIEW_MAX_STRING_LEN);
if (pInfo->sName != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
ENCODE_U32(pPayload, pInfo->Offset);
ENCODE_U32(pPayload, pInfo->RangeMin);
ENCODE_U32(pPayload, pInfo->RangeMax);
pPayload = _EncodeFloat(pPayload, pInfo->ScalingFactor);
pPayload = _EncodeStr(pPayload, pInfo->sUnit, SEGGER_SYSVIEW_MAX_STRING_LEN);
} else if (pInfo->ScalingFactor != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
ENCODE_U32(pPayload, pInfo->Offset);
ENCODE_U32(pPayload, pInfo->RangeMin);
ENCODE_U32(pPayload, pInfo->RangeMax);
pPayload = _EncodeFloat(pPayload, pInfo->ScalingFactor);
} else if (pInfo->RangeMax != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
ENCODE_U32(pPayload, pInfo->Offset);
ENCODE_U32(pPayload, pInfo->RangeMin);
ENCODE_U32(pPayload, pInfo->RangeMax);
} else if (pInfo->RangeMin != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
ENCODE_U32(pPayload, pInfo->Offset);
ENCODE_U32(pPayload, pInfo->RangeMin);
} else if (pInfo->Offset != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
ENCODE_U32(pPayload, pInfo->Offset);
} else if (pInfo->DataType != 0) {
ENCODE_U32(pPayload, pInfo->DataType);
}
_SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_EX);
RECORD_END();
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_HeapDefine() * SEGGER_SYSVIEW_HeapDefine()
@@ -2820,9 +2979,6 @@ void SEGGER_SYSVIEW_RegisterModule(SEGGER_SYSVIEW_MODULE* pModule) {
_NumModules++; _NumModules++;
} }
SEGGER_SYSVIEW_SendModule(0); SEGGER_SYSVIEW_SendModule(0);
if (pModule->pfSendModuleDesc) {
pModule->pfSendModuleDesc();
}
SEGGER_SYSVIEW_UNLOCK(); SEGGER_SYSVIEW_UNLOCK();
} }
@@ -2906,6 +3062,9 @@ void SEGGER_SYSVIEW_SendModule(U8 ModuleId) {
_SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_MODULEDESC); _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_MODULEDESC);
RECORD_END(); RECORD_END();
} }
if (pModule && pModule->pfSendModuleDesc) {
pModule->pfSendModuleDesc();
}
} }
} }
@@ -2986,6 +3145,39 @@ void SEGGER_SYSVIEW_PrintfHostEx(const char* s, U32 Options, ...) {
#endif #endif
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VPrintfHostEx()
*
* Function description
* Print a string which is formatted on the host by the SystemView Application
* with Additional information.
*
* Parameters
* s - String to be formatted.
* Options - Options for the string. i.e. Log level.
* pParamList - Pointer to the list of arguments for the format string
*
* Additional information
* All format arguments are treated as 32-bit scalar values.
*/
void SEGGER_SYSVIEW_VPrintfHostEx(const char* s, U32 Options, va_list *pParamList) {
#if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
int r;
va_list ParamListCopy;
va_copy(ParamListCopy, *pParamList);
r = _VPrintHost(s, Options, pParamList);
if (r == -1) {
_VPrintTarget(s, Options, &ParamListCopy);
}
va_end(ParamListCopy);
#else
_VPrintHost(s, Options, pParamList);
#endif
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_PrintfHost() * SEGGER_SYSVIEW_PrintfHost()
@@ -3020,6 +3212,37 @@ void SEGGER_SYSVIEW_PrintfHost(const char* s, ...) {
#endif #endif
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VPrintfHost()
*
* Function description
* Print a string which is formatted on the host by the SystemView Application.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*
* Additional information
* All format arguments are treated as 32-bit scalar values.
*/
void SEGGER_SYSVIEW_VPrintfHost(const char* s, va_list *pParamList) {
#if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
int r;
va_list ParamListCopy;
va_copy(ParamListCopy, *pParamList);
r = _VPrintHost(s, SEGGER_SYSVIEW_LOG, pParamList);
if (r == -1) {
_VPrintTarget(s, SEGGER_SYSVIEW_LOG, &ParamListCopy);
}
va_end(ParamListCopy);
#else
_VPrintHost(s, SEGGER_SYSVIEW_LOG, pParamList);
#endif
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_WarnfHost() * SEGGER_SYSVIEW_WarnfHost()
@@ -3055,6 +3278,38 @@ void SEGGER_SYSVIEW_WarnfHost(const char* s, ...) {
#endif #endif
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VWarnfHost()
*
* Function description
* Print a warning string which is formatted on the host by
* the SystemView Application.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*
* Additional information
* All format arguments are treated as 32-bit scalar values.
*/
void SEGGER_SYSVIEW_VWarnfHost(const char* s, va_list *pParamList) {
#if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
int r;
va_list ParamListCopy;
va_copy(ParamListCopy, *pParamList);
r = _VPrintHost(s, SEGGER_SYSVIEW_WARNING, pParamList);
if (r == -1) {
_VPrintTarget(s, SEGGER_SYSVIEW_WARNING, &ParamListCopy);
}
va_end(ParamListCopy);
#else
_VPrintHost(s, SEGGER_SYSVIEW_WARNING, pParamList);
#endif
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_ErrorfHost() * SEGGER_SYSVIEW_ErrorfHost()
@@ -3090,6 +3345,38 @@ void SEGGER_SYSVIEW_ErrorfHost(const char* s, ...) {
#endif #endif
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VErrorfHost()
*
* Function description
* Print a warning string which is formatted on the host by
* the SystemView Application.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*
* Additional information
* All format arguments are treated as 32-bit scalar values.
*/
void SEGGER_SYSVIEW_VErrorfHost(const char* s, va_list *pParamList) {
#if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
int r;
va_list ParamListCopy;
va_copy(ParamListCopy, *pParamList);
r = _VPrintHost(s, SEGGER_SYSVIEW_ERROR, pParamList);
if (r == -1) {
_VPrintTarget(s, SEGGER_SYSVIEW_ERROR, &ParamListCopy);
}
va_end(ParamListCopy);
#else
_VPrintHost(s, SEGGER_SYSVIEW_ERROR, pParamList);
#endif
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_PrintfTargetEx() * SEGGER_SYSVIEW_PrintfTargetEx()
@@ -3110,6 +3397,23 @@ void SEGGER_SYSVIEW_PrintfTargetEx(const char* s, U32 Options, ...) {
va_end(ParamList); va_end(ParamList);
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VPrintfTargetEx()
*
* Function description
* Print a string which is formatted on the target before sent to
* the host with Additional information.
*
* Parameters
* s - String to be formatted.
* Options - Options for the string. i.e. Log level.
* pParamList - Pointer to the list of arguments for the format string
*/
void SEGGER_SYSVIEW_VPrintfTargetEx(const char* s, U32 Options, va_list *pParamList) {
_VPrintTarget(s, Options, pParamList);
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_PrintfTarget() * SEGGER_SYSVIEW_PrintfTarget()
@@ -3129,6 +3433,22 @@ void SEGGER_SYSVIEW_PrintfTarget(const char* s, ...) {
va_end(ParamList); va_end(ParamList);
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VPrintfTarget()
*
* Function description
* Print a string which is formatted on the target before sent to
* the host.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*/
void SEGGER_SYSVIEW_VPrintfTarget(const char* s, va_list* pParamList) {
_VPrintTarget(s, SEGGER_SYSVIEW_LOG, pParamList);
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_WarnfTarget() * SEGGER_SYSVIEW_WarnfTarget()
@@ -3148,6 +3468,22 @@ void SEGGER_SYSVIEW_WarnfTarget(const char* s, ...) {
va_end(ParamList); va_end(ParamList);
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VWarnfTarget()
*
* Function description
* Print a warning string which is formatted on the target before
* sent to the host.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*/
void SEGGER_SYSVIEW_VWarnfTarget(const char* s, va_list* pParamList) {
_VPrintTarget(s, SEGGER_SYSVIEW_WARNING, pParamList);
}
/********************************************************************* /*********************************************************************
* *
* SEGGER_SYSVIEW_ErrorfTarget() * SEGGER_SYSVIEW_ErrorfTarget()
@@ -3166,6 +3502,22 @@ void SEGGER_SYSVIEW_ErrorfTarget(const char* s, ...) {
_VPrintTarget(s, SEGGER_SYSVIEW_ERROR, &ParamList); _VPrintTarget(s, SEGGER_SYSVIEW_ERROR, &ParamList);
va_end(ParamList); va_end(ParamList);
} }
/*********************************************************************
*
* SEGGER_SYSVIEW_VErrorfTarget()
*
* Function description
* Print an error string which is formatted on the target before
* sent to the host.
*
* Parameters
* s - String to be formatted.
* pParamList - Pointer to the list of arguments for the format string
*/
void SEGGER_SYSVIEW_VErrorfTarget(const char* s, va_list* pParamList) {
_VPrintTarget(s, SEGGER_SYSVIEW_ERROR, pParamList);
}
#endif // SEGGER_SYSVIEW_EXCLUDE_PRINTF #endif // SEGGER_SYSVIEW_EXCLUDE_PRINTF
/********************************************************************* /*********************************************************************

View File

@@ -3,14 +3,14 @@
* *
* SPDX-License-Identifier: BSD-1-Clause * SPDX-License-Identifier: BSD-1-Clause
* *
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2023-2025 Espressif Systems (Shanghai) CO LTD
*/ */
/********************************************************************* /*********************************************************************
* SEGGER Microcontroller GmbH * * SEGGER Microcontroller GmbH *
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -49,13 +49,13 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW.h File : SEGGER_SYSVIEW.h
Purpose : System visualization API. Purpose : System visualization API.
Revision: $Rev: 28237 $ Revision: $Rev: 28768 $
*/ */
#ifndef SEGGER_SYSVIEW_H #ifndef SEGGER_SYSVIEW_H
@@ -123,7 +123,7 @@ extern "C" {
#define SYSVIEW_EVTID_TIMER_EXIT 20 #define SYSVIEW_EVTID_TIMER_EXIT 20
#define SYSVIEW_EVTID_STACK_INFO 21 #define SYSVIEW_EVTID_STACK_INFO 21
#define SYSVIEW_EVTID_MODULEDESC 22 #define SYSVIEW_EVTID_MODULEDESC 22
#define SYSVIEW_EVTID_DATA_SAMPLE 23
#define SYSVIEW_EVTID_INIT 24 #define SYSVIEW_EVTID_INIT 24
#define SYSVIEW_EVTID_NAME_RESOURCE 25 #define SYSVIEW_EVTID_NAME_RESOURCE 25
#define SYSVIEW_EVTID_PRINT_FORMATTED 26 #define SYSVIEW_EVTID_PRINT_FORMATTED 26
@@ -135,12 +135,13 @@ extern "C" {
// //
// SystemView extended events. Sent with ID 31. // SystemView extended events. Sent with ID 31.
// //
#define SYSVIEW_EVTID_EX_MARK 0 #define SYSVIEW_EVTID_EX_MARK 0
#define SYSVIEW_EVTID_EX_NAME_MARKER 1 #define SYSVIEW_EVTID_EX_NAME_MARKER 1
#define SYSVIEW_EVTID_EX_HEAP_DEFINE 2 #define SYSVIEW_EVTID_EX_HEAP_DEFINE 2
#define SYSVIEW_EVTID_EX_HEAP_ALLOC 3 #define SYSVIEW_EVTID_EX_HEAP_ALLOC 3
#define SYSVIEW_EVTID_EX_HEAP_ALLOC_EX 4 #define SYSVIEW_EVTID_EX_HEAP_ALLOC_EX 4
#define SYSVIEW_EVTID_EX_HEAP_FREE 5 #define SYSVIEW_EVTID_EX_HEAP_FREE 5
#define SYSVIEW_EVTID_EX_REGISTER_DATA 6
// //
// Event masks to disable/enable events // Event masks to disable/enable events
// //
@@ -167,7 +168,7 @@ extern "C" {
#define SYSVIEW_EVTMASK_TIMER_EXIT (1 << SYSVIEW_EVTID_TIMER_EXIT) #define SYSVIEW_EVTMASK_TIMER_EXIT (1 << SYSVIEW_EVTID_TIMER_EXIT)
#define SYSVIEW_EVTMASK_STACK_INFO (1 << SYSVIEW_EVTID_STACK_INFO) #define SYSVIEW_EVTMASK_STACK_INFO (1 << SYSVIEW_EVTID_STACK_INFO)
#define SYSVIEW_EVTMASK_MODULEDESC (1 << SYSVIEW_EVTID_MODULEDESC) #define SYSVIEW_EVTMASK_MODULEDESC (1 << SYSVIEW_EVTID_MODULEDESC)
#define SYSVIEW_EVTMASK_DATA_SAMPLE (1 << SYSVIEW_EVTID_DATA_SAMPLE)
#define SYSVIEW_EVTMASK_INIT (1 << SYSVIEW_EVTID_INIT) #define SYSVIEW_EVTMASK_INIT (1 << SYSVIEW_EVTID_INIT)
#define SYSVIEW_EVTMASK_NAME_RESOURCE (1 << SYSVIEW_EVTID_NAME_RESOURCE) #define SYSVIEW_EVTMASK_NAME_RESOURCE (1 << SYSVIEW_EVTID_NAME_RESOURCE)
#define SYSVIEW_EVTMASK_PRINT_FORMATTED (1 << SYSVIEW_EVTID_PRINT_FORMATTED) #define SYSVIEW_EVTMASK_PRINT_FORMATTED (1 << SYSVIEW_EVTID_PRINT_FORMATTED)
@@ -202,8 +203,42 @@ typedef struct {
U32 Prio; U32 Prio;
U32 StackBase; U32 StackBase;
U32 StackSize; U32 StackSize;
U32 StackUsage;
} SEGGER_SYSVIEW_TASKINFO; } SEGGER_SYSVIEW_TASKINFO;
typedef struct {
U32 TaskID;
U32 StackBase;
U32 StackSize;
U32 StackUsage;
} SEGGER_SYSVIEW_STACKINFO;
typedef struct {
U32 ID;
union {
U32* pU32_Value;
I32* pI32_Value;
float* pFloat_Value;
};
} SEGGER_SYSVIEW_DATA_SAMPLE;
typedef enum {
SEGGER_SYSVIEW_TYPE_U32 = 0,
SEGGER_SYSVIEW_TYPE_I32 = 1,
SEGGER_SYSVIEW_TYPE_FLOAT = 2
} SEGGER_SYSVIEW_DATA_TYPE;
typedef struct {
U32 ID;
SEGGER_SYSVIEW_DATA_TYPE DataType;
I32 Offset;
I32 RangeMin;
I32 RangeMax;
float ScalingFactor;
const char* sName;
const char* sUnit;
} SEGGER_SYSVIEW_DATA_REGISTER;
typedef struct SEGGER_SYSVIEW_MODULE_STRUCT SEGGER_SYSVIEW_MODULE; typedef struct SEGGER_SYSVIEW_MODULE_STRUCT SEGGER_SYSVIEW_MODULE;
struct SEGGER_SYSVIEW_MODULE_STRUCT { struct SEGGER_SYSVIEW_MODULE_STRUCT {
@@ -247,8 +282,8 @@ EXTERN unsigned int SEGGER_SYSVIEW_InterruptId;
*/ */
typedef struct { typedef struct {
U64 (*pfGetTime) (void); U64 (*pfGetTime) (void);
void (*pfSendTaskList) (void); void (*pfSendTaskList) (void);
} SEGGER_SYSVIEW_OS_API; } SEGGER_SYSVIEW_OS_API;
/********************************************************************* /*********************************************************************
@@ -262,9 +297,13 @@ void SEGGER_SYSVIEW_Stop (void);
void SEGGER_SYSVIEW_GetSysDesc (void); void SEGGER_SYSVIEW_GetSysDesc (void);
void SEGGER_SYSVIEW_SendTaskList (void); void SEGGER_SYSVIEW_SendTaskList (void);
void SEGGER_SYSVIEW_SendTaskInfo (const SEGGER_SYSVIEW_TASKINFO* pInfo); void SEGGER_SYSVIEW_SendTaskInfo (const SEGGER_SYSVIEW_TASKINFO* pInfo);
void SEGGER_SYSVIEW_SendStackInfo (const SEGGER_SYSVIEW_STACKINFO* pInfo);
void SEGGER_SYSVIEW_SendSysDesc (const char* sSysDesc); void SEGGER_SYSVIEW_SendSysDesc (const char* sSysDesc);
int SEGGER_SYSVIEW_IsStarted (void); int SEGGER_SYSVIEW_IsStarted (void);
int SEGGER_SYSVIEW_GetChannelID (void); int SEGGER_SYSVIEW_GetChannelID (void);
void SEGGER_SYSVIEW_SampleData (const SEGGER_SYSVIEW_DATA_SAMPLE *pInfo);
// Checks whether tracing has been started // Checks whether tracing has been started
U8 SEGGER_SYSVIEW_Started(void); U8 SEGGER_SYSVIEW_Started(void);
@@ -311,6 +350,7 @@ void SEGGER_SYSVIEW_HeapAllocEx (void* pHeap, void* pUserData,
void SEGGER_SYSVIEW_HeapFree (void* pHeap, void* pUserData); void SEGGER_SYSVIEW_HeapFree (void* pHeap, void* pUserData);
void SEGGER_SYSVIEW_NameResource (U32 ResourceId, const char* sName); void SEGGER_SYSVIEW_NameResource (U32 ResourceId, const char* sName);
void SEGGER_SYSVIEW_RegisterData ( SEGGER_SYSVIEW_DATA_REGISTER* pInfo);
int SEGGER_SYSVIEW_SendPacket (U8* pPacket, U8* pPayloadEnd, unsigned int EventId); int SEGGER_SYSVIEW_SendPacket (U8* pPacket, U8* pPayloadEnd, unsigned int EventId);
@@ -341,13 +381,21 @@ void SEGGER_SYSVIEW_SendNumModules (void);
*/ */
#ifndef SEGGER_SYSVIEW_EXCLUDE_PRINTF // Define in project to avoid warnings about variable parameter list #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_PrintfHostEx (const char* s, U32 Options, ...);
void SEGGER_SYSVIEW_VPrintfHostEx (const char* s, U32 Options, va_list* pParamList);
void SEGGER_SYSVIEW_PrintfTargetEx (const char* s, U32 Options, ...); void SEGGER_SYSVIEW_PrintfTargetEx (const char* s, U32 Options, ...);
void SEGGER_SYSVIEW_VPrintfTargetEx (const char* s, U32 Options, va_list* pParamList);
void SEGGER_SYSVIEW_PrintfHost (const char* s, ...); void SEGGER_SYSVIEW_PrintfHost (const char* s, ...);
void SEGGER_SYSVIEW_VPrintfHost (const char* s, va_list* pParamList);
void SEGGER_SYSVIEW_PrintfTarget (const char* s, ...); void SEGGER_SYSVIEW_PrintfTarget (const char* s, ...);
void SEGGER_SYSVIEW_VPrintfTarget (const char* s, va_list* pParamList);
void SEGGER_SYSVIEW_WarnfHost (const char* s, ...); void SEGGER_SYSVIEW_WarnfHost (const char* s, ...);
void SEGGER_SYSVIEW_VWarnfHost (const char* s, va_list* pParamList);
void SEGGER_SYSVIEW_WarnfTarget (const char* s, ...); void SEGGER_SYSVIEW_WarnfTarget (const char* s, ...);
void SEGGER_SYSVIEW_VWarnfTarget (const char* s, va_list* pParamList);
void SEGGER_SYSVIEW_ErrorfHost (const char* s, ...); void SEGGER_SYSVIEW_ErrorfHost (const char* s, ...);
void SEGGER_SYSVIEW_VErrorfHost (const char* s, va_list* pParamList);
void SEGGER_SYSVIEW_ErrorfTarget (const char* s, ...); void SEGGER_SYSVIEW_ErrorfTarget (const char* s, ...);
void SEGGER_SYSVIEW_VErrorfTarget (const char* s, va_list* pParamList);
#endif #endif
void SEGGER_SYSVIEW_Print (const char* s); void SEGGER_SYSVIEW_Print (const char* s);

View File

@@ -3,14 +3,14 @@
* *
* SPDX-License-Identifier: BSD-1-Clause * SPDX-License-Identifier: BSD-1-Clause
* *
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2023-2025 Espressif Systems (Shanghai) CO LTD
*/ */
/********************************************************************* /*********************************************************************
* SEGGER Microcontroller GmbH * * SEGGER Microcontroller GmbH *
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -49,7 +49,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------
@@ -72,6 +72,8 @@ Revision: $Rev: 26230 $
#include "SEGGER_SYSVIEW_Conf.h" #include "SEGGER_SYSVIEW_Conf.h"
#include "SEGGER_RTT_Conf.h" #include "SEGGER_RTT_Conf.h"
#include "esp_assert.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -370,12 +372,14 @@ extern "C" {
#define SEGGER_SYSVIEW_MAX_STRING_LEN 128 #define SEGGER_SYSVIEW_MAX_STRING_LEN 128
#endif #endif
ESP_STATIC_ASSERT(SEGGER_SYSVIEW_MAX_STRING_LEN < 255, "SEGGER Sysview string length must be less than 255.");
/********************************************************************* /*********************************************************************
* *
* Define: SEGGER_SYSVIEW_SUPPORT_LONG_ID * Define: SEGGER_SYSVIEW_SUPPORT_LONG_ID
* *
* Description * Description
* It set, support enconding Evend Ids longer than 14 bit. * It set, support encoding Evend Ids longer than 14 bit.
* Default * Default
* 1 * 1
*/ */
@@ -388,7 +392,7 @@ extern "C" {
* Define: SEGGER_SYSVIEW_SUPPORT_LONG_DATA * Define: SEGGER_SYSVIEW_SUPPORT_LONG_DATA
* *
* Description * Description
* It set, support enconding event data longer than 14 bit. * It set, support encoding event data longer than 14 bit.
* Default * Default
* 0 * 0
*/ */
@@ -517,7 +521,7 @@ extern "C" {
* Define: SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT * Define: SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT
* *
* Description * Description
* Configure how frequently syncronization is sent in post-mortem * Configure how frequently synchronization is sent in post-mortem
* mode. * mode.
* Default * Default
* 8: (1 << 8) = Every 256 Events. * 8: (1 << 8) = Every 256 Events.

View File

@@ -8,7 +8,7 @@
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH * * (c) 1995 - 2024 SEGGER Microcontroller GmbH *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -47,7 +47,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.42 * * SystemView version: 3.56 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------

View File

@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
import copy import copy
import json import json
@@ -30,6 +30,7 @@ SYSVIEW_EVTID_TIMER_ENTER = 19
SYSVIEW_EVTID_TIMER_EXIT = 20 SYSVIEW_EVTID_TIMER_EXIT = 20
SYSVIEW_EVTID_STACK_INFO = 21 SYSVIEW_EVTID_STACK_INFO = 21
SYSVIEW_EVTID_MODULEDESC = 22 SYSVIEW_EVTID_MODULEDESC = 22
SYSVIEW_EVTID_DATA_SAMPLE = 23
SYSVIEW_EVTID_INIT = 24 SYSVIEW_EVTID_INIT = 24
SYSVIEW_EVENT_ID_PREDEF_LEN_MAX = SYSVIEW_EVTID_INIT SYSVIEW_EVENT_ID_PREDEF_LEN_MAX = SYSVIEW_EVTID_INIT
SYSVIEW_EVTID_NAME_RESOURCE = 25 SYSVIEW_EVTID_NAME_RESOURCE = 25
@@ -66,7 +67,8 @@ _sysview_events_map = {
'SYS_TIMER_ENTER': SYSVIEW_EVTID_TIMER_ENTER, 'SYS_TIMER_ENTER': SYSVIEW_EVTID_TIMER_ENTER,
'SYS_TIMER_EXIT': SYSVIEW_EVTID_TIMER_EXIT, 'SYS_TIMER_EXIT': SYSVIEW_EVTID_TIMER_EXIT,
'SYS_STACK_INFO': SYSVIEW_EVTID_STACK_INFO, 'SYS_STACK_INFO': SYSVIEW_EVTID_STACK_INFO,
'SYS_MODULEDESC': SYSVIEW_EVTID_INIT, 'SYS_MODULEDESC': SYSVIEW_EVTID_MODULEDESC,
'SYS_DATA_SAMPLE': SYSVIEW_EVTID_DATA_SAMPLE,
'SYS_INIT': SYSVIEW_EVTID_INIT, 'SYS_INIT': SYSVIEW_EVTID_INIT,
'SYS_NAME_RESOURCE': SYSVIEW_EVTID_NAME_RESOURCE, 'SYS_NAME_RESOURCE': SYSVIEW_EVTID_NAME_RESOURCE,
'SYS_PRINT_FORMATTED': SYSVIEW_EVTID_PRINT_FORMATTED, 'SYS_PRINT_FORMATTED': SYSVIEW_EVTID_PRINT_FORMATTED,
@@ -263,7 +265,7 @@ def _decode_str(reader):
sz, = struct.unpack('<B', reader.read(1)) sz, = struct.unpack('<B', reader.read(1))
if sz == 0xFF: if sz == 0xFF:
buf = struct.unpack('<2B', reader.read(2)) buf = struct.unpack('<2B', reader.read(2))
sz = (buf[1] << 8) | buf[0] sz = (buf[0] << 8) | buf[1]
val, = struct.unpack('<%ds' % sz, reader.read(sz)) val, = struct.unpack('<%ds' % sz, reader.read(sz))
val = val.decode('utf-8') val = val.decode('utf-8')
if sz < 0xFF: if sz < 0xFF:
@@ -510,6 +512,7 @@ class SysViewPredefinedEvent(SysViewEvent):
SysViewEventParamSimple('cpu_freq', _decode_u32), SysViewEventParamSimple('cpu_freq', _decode_u32),
SysViewEventParamSimple('ram_base', _decode_u32), SysViewEventParamSimple('ram_base', _decode_u32),
SysViewEventParamSimple('id_shift', _decode_u32)]), SysViewEventParamSimple('id_shift', _decode_u32)]),
SYSVIEW_EVTID_DATA_SAMPLE: ('svDataSample', []),
SYSVIEW_EVTID_NAME_RESOURCE: ('svNameResource', [SysViewEventParamSimple('res_id', _decode_u32), SYSVIEW_EVTID_NAME_RESOURCE: ('svNameResource', [SysViewEventParamSimple('res_id', _decode_u32),
SysViewEventParamSimple('name', _decode_str)]), SysViewEventParamSimple('name', _decode_str)]),
SYSVIEW_EVTID_PRINT_FORMATTED: ('svPrint', [SysViewEventParamSimple('msg', _decode_str), SYSVIEW_EVTID_PRINT_FORMATTED: ('svPrint', [SysViewEventParamSimple('msg', _decode_str),
@@ -900,7 +903,7 @@ class SysViewTraceDataProcessor(apptrace.TraceDataProcessor):
# empty list means IDLE context or self.start_ctx # empty list means IDLE context or self.start_ctx
self.ctx_stack[t.core_id] = [] self.ctx_stack[t.core_id] = []
# context is undefined, we do not know have we started the tracing in task/IDLE or IRQ context # context is undefined, we do not know have we started the tracing in task/IDLE or IRQ context
# in general there are three scenarious when we can start tracing: when core is in task, IDLE task or IRQ context # in general there are three scenarios when we can start tracing: when core is in task, IDLE task or IRQ context
self.prev_ctx[t.core_id] = None self.prev_ctx[t.core_id] = None
def _get_curr_context(self, core_id): def _get_curr_context(self, core_id):

View File

@@ -26141,12 +26141,13 @@
"xTimerPendFunctionCallFromISR": 163 "xTimerPendFunctionCallFromISR": 163
}, },
"system": { "system": {
"SYS_DATA_SAMPLE": 23,
"SYS_IDLE": 17, "SYS_IDLE": 17,
"SYS_INIT": 24, "SYS_INIT": 24,
"SYS_ISR_ENTER": 2, "SYS_ISR_ENTER": 2,
"SYS_ISR_EXIT": 3, "SYS_ISR_EXIT": 3,
"SYS_ISR_TO_SCHEDULER": 18, "SYS_ISR_TO_SCHEDULER": 18,
"SYS_MODULEDESC": 24, "SYS_MODULEDESC": 22,
"SYS_NAME_RESOURCE": 25, "SYS_NAME_RESOURCE": 25,
"SYS_NOP": 0, "SYS_NOP": 0,
"SYS_NUMMODULES": 27, "SYS_NUMMODULES": 27,

View File

@@ -24505,12 +24505,13 @@
"xTimerPendFunctionCallFromISR": 163 "xTimerPendFunctionCallFromISR": 163
}, },
"system": { "system": {
"SYS_DATA_SAMPLE": 23,
"SYS_IDLE": 17, "SYS_IDLE": 17,
"SYS_INIT": 24, "SYS_INIT": 24,
"SYS_ISR_ENTER": 2, "SYS_ISR_ENTER": 2,
"SYS_ISR_EXIT": 3, "SYS_ISR_EXIT": 3,
"SYS_ISR_TO_SCHEDULER": 18, "SYS_ISR_TO_SCHEDULER": 18,
"SYS_MODULEDESC": 24, "SYS_MODULEDESC": 22,
"SYS_NAME_RESOURCE": 25, "SYS_NAME_RESOURCE": 25,
"SYS_NOP": 0, "SYS_NOP": 0,
"SYS_NUMMODULES": 27, "SYS_NUMMODULES": 27,