diff --git a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c index 33477e26ed..43625d3d4b 100644 --- a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c +++ b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c @@ -142,7 +142,11 @@ static U64 _cbGetTime(void) { void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) { unsigned n; - if (memcmp(pcTaskName, "IDLE", 5) == 0) { + /* On multi-core we have several idle tasks with 'IDLEx' names + Not best solution, because we can filter out user tasks starting with 'IDLE'. + But we can not use 'xTaskGetIdleTaskHandle' because at the moment when this + function is called array of idle tasks handles are not initialized yet. */ + if (memcmp(pcTaskName, "IDLE", 4) == 0) { return; } @@ -176,7 +180,11 @@ void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPrio void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) { unsigned n; - if (memcmp(pcTaskName, "IDLE", 5) == 0) { + /* On multi-core we have several idle tasks with 'IDLEx' names + Not best solution, because we can filter out user tasks starting with 'IDLE'. + But we can not use 'xTaskGetIdleTaskHandle' because at the moment when this + function is called array of idle tasks handles are not initialized yet. */ + if (memcmp(pcTaskName, "IDLE", 4) == 0) { return; } diff --git a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h index 3fd508bfde..9fc085cd1f 100644 --- a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h +++ b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h @@ -346,8 +346,8 @@ define away all of the tracing macros. } #else #define traceTASK_SWITCHED_IN() { \ - if (memcmp(pxCurrentTCB[esp_cpu_get_core_id()]->pcTaskName, "IDLE", 5) != 0) { \ - SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB[esp_cpu_get_core_id()]); \ + if (memcmp(prvGetTCBFromHandle(NULL)->pcTaskName, "IDLE", 4) != 0) { \ + SEGGER_SYSVIEW_OnTaskStartExec((U32)prvGetTCBFromHandle(NULL)); \ } else { \ SEGGER_SYSVIEW_OnIdle(); \ } \