From 5281c04d97da873b9ccb1a7332b655162fec02d0 Mon Sep 17 00:00:00 2001 From: Samuel Obuch Date: Wed, 30 Apr 2025 17:17:20 +0200 Subject: [PATCH] fix(sysview): do not use freertos ticks to prevent deadlock --- .../Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c b/components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c index 6754a322c8..679b40107f 100644 --- a/components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c +++ b/components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c @@ -108,7 +108,7 @@ static void _cbSendTaskList(void) { * Called from SystemView when asked by the host, returns the * current system time in micro seconds. */ -static U64 _cbGetTime(void) { +__attribute__((unused)) static U64 _cbGetTime(void) { U64 Time; Time = xTaskGetTickCountFromISR(); @@ -260,7 +260,10 @@ void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 Stac */ // Callbacks provided to SYSTEMVIEW by FreeRTOS const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = { - _cbGetTime, + /* Callback _cbGetTime locks xKernelLock inside xTaskGetTickCountFromISR, this can cause deadlock on multi-core. + To prevent deadlock, always lock xKernelLock before s_sys_view_lock. Omitting the callback here results in sending + SYSVIEW_EVTID_SYSTIME_CYCLES events instead of SYSVIEW_EVTID_SYSTIME_US */ + NULL, _cbSendTaskList, };