Skip to content

Commit a0fc3e6

Browse files
committed
fix(sysview): do not use freertos ticks to prevent deadlock
1 parent 14c29c4 commit a0fc3e6

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static void _cbSendTaskList(void) {
108108
* Called from SystemView when asked by the host, returns the
109109
* current system time in micro seconds.
110110
*/
111-
static U64 _cbGetTime(void) {
111+
__attribute__((unused)) static U64 _cbGetTime(void) {
112112
U64 Time;
113113

114114
Time = xTaskGetTickCountFromISR();
@@ -260,7 +260,10 @@ void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 Stac
260260
*/
261261
// Callbacks provided to SYSTEMVIEW by FreeRTOS
262262
const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = {
263-
_cbGetTime,
263+
/* Callback _cbGetTime locks xKernelLock inside xTaskGetTickCountFromISR, this can cause deadlock on multi-core.
264+
To prevent deadlock, always lock xKernelLock before s_sys_view_lock. Omitting the callback here results in sending
265+
SYSVIEW_EVTID_SYSTIME_CYCLES events instead of SYSVIEW_EVTID_SYSTIME_US */
266+
NULL,
264267
_cbSendTaskList,
265268
};
266269

0 commit comments

Comments
 (0)