Percepio Trace Recorder v4.8.0.hotfix1
Loading...
Searching...
No Matches
trcKernelPort.h
1/*
2 * Trace Recorder for Tracealyzer v4.8.0.hotfix1
3 * Copyright 2023 Percepio AB
4 * www.percepio.com
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 *
8 * FreeRTOS specific definitions needed by the trace recorder
9 */
10
11#ifndef TRC_KERNEL_PORT_H
12#define TRC_KERNEL_PORT_H
13
14#include <freertos/FreeRTOS.h>
15#include <freertos/portmacro.h>
16#include <trcDefines.h>
17#include <esp_idf_version.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#ifdef CONFIG_PERCEPIO_TRACERECORDER_ENABLED
24#define TRC_USE_TRACEALYZER_RECORDER 1
25#else
26#define TRC_USE_TRACEALYZER_RECORDER 0
27#endif
28
29/*** FreeRTOS version codes **************************************************/
30#define TRC_ESP_IDF_VERSION_NOT_SET 0
31#define TRC_ESP_IDF_VERSION_4_2_0 420
32#define TRC_ESP_IDF_VERSION_4_3_0 430
33#define TRC_ESP_IDF_VERSION_4_4_0 440
34#define TRC_ESP_IDF_VERSION_4_5_0 450
35#define TRC_ESP_IDF_VERSION_5_0_0 500
36#define TRC_ESP_IDF_VERSION_5_1_0 510
37#define TRC_ESP_IDF_VERSION_5_2_0 520
38
39#if ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 0
40#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_0_0
41#elif ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 1
42#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_1_0
43#elif ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 2
44#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_2_0
45#elif ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 3
46#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_3_0
47#elif ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 4
48#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_4_0
49#elif ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR == 5
50#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_4_5_0
51#elif ESP_IDF_VERSION_MAJOR == 5 && ESP_IDF_VERSION_MINOR == 0
52#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_5_0_0
53#elif ESP_IDF_VERSION_MAJOR == 5 && ESP_IDF_VERSION_MINOR == 1
54#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_5_1_0
55#elif ESP_IDF_VERSION_MAJOR == 5 && ESP_IDF_VERSION_MINOR == 2
56#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_5_2_0
57#else
58#define TRC_CFG_ESP_IDF_VERSION TRC_ESP_IDF_VERSION_NOT_SET
59#endif
60
61#if (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0)
62#define prvGetStreamBufferType(x) ((( StreamBuffer_t * )x )->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER)
63#else
64#define prvGetStreamBufferType(x) 0
65#endif
66
67#define STRING_CAST(x) x
68#define TraceKernelPortTickType_t TickType_t
69#define TraceKernelPortTaskHandle_t TaskHandle_t
70
71#if !CONFIG_FREERTOS_UNICORE
72#undef TRC_CFG_GET_CURRENT_CORE
73#define TRC_CFG_GET_CURRENT_CORE() (xPortGetCoreID())
74#endif
75
76#if !CONFIG_FREERTOS_UNICORE
77extern portMUX_TYPE xTraceMutex;
78
79#define TRC_KERNEL_PORT_ALLOC_CRITICAL_SECTION() TraceUnsignedBaseType_t TRACE_ALLOC_CRITICAL_SECTION_NAME;
80#define TRC_KERNEL_PORT_ENTER_CRITICAL_SECTION() TRACE_ALLOC_CRITICAL_SECTION_NAME = 0UL; portENTER_CRITICAL_SAFE(&xTraceMutex);
81#define TRC_KERNEL_PORT_EXIT_CRITICAL_SECTION() (void)TRACE_ALLOC_CRITICAL_SECTION_NAME; portEXIT_CRITICAL_SAFE(&xTraceMutex);
82#else
83/* These are never used since trcHardwarePort.h will define the critical sections if CONFIG_FREERTOS_UNICORE */
84#define TRC_KERNEL_PORT_ALLOC_CRITICAL_SECTION()
85#define TRC_KERNEL_PORT_ENTER_CRITICAL_SECTION()
86#define TRC_KERNEL_PORT_EXIT_CRITICAL_SECTION()
87#endif
88
89#if (defined(TRC_USE_TRACEALYZER_RECORDER)) && (TRC_USE_TRACEALYZER_RECORDER == 1)
90
91#define TRC_PLATFORM_CFG "FreeRTOS"
92#define TRC_PLATFORM_CFG_MAJOR 1
93#define TRC_PLATFORM_CFG_MINOR 2
94#define TRC_PLATFORM_CFG_PATCH 0
95
110__attribute__((constructor)) void vTraceInit();
111
112#if defined(TRC_CFG_ENABLE_STACK_MONITOR) && (TRC_CFG_ENABLE_STACK_MONITOR == 1) && (TRC_CFG_SCHEDULING_ONLY == 0)
113
119#define TRC_CFG_ALLOW_TASK_DELETE INCLUDE_vTaskDelete
120
121/* Required for stack monitoring */
122#undef INCLUDE_uxTaskGetStackHighWaterMark
123#define INCLUDE_uxTaskGetStackHighWaterMark 1
124
125#endif
126
127/* INCLUDE_xTaskGetCurrentTaskHandle must be set to 1 for tracing to work properly */
128#undef INCLUDE_xTaskGetCurrentTaskHandle
129#define INCLUDE_xTaskGetCurrentTaskHandle 1
130
131#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
132
133#define TRC_KERNEL_PORT_KERNEL_CAN_SWITCH_TO_SAME_TASK 0
134
135#include <trcHeap.h>
136
137#define TRC_KERNEL_PORT_BUFFER_SIZE (sizeof(TraceHeapHandle_t) + sizeof(void*))
138
139#endif
140
144typedef struct TraceKernelPortDataBuffer
145{
146 uint8_t buffer[TRC_KERNEL_PORT_BUFFER_SIZE];
148
157traceResult xTraceKernelPortInitialize(TraceKernelPortDataBuffer_t* pxBuffer);
158
165traceResult xTraceKernelPortEnable(void);
166
175traceResult xTraceKernelPortDelay(uint32_t uiTicks);
176
183unsigned char xTraceKernelPortIsSchedulerSuspended(void);
184
188#define TRC_KERNEL_PORT_SET_INTERRUPT_MASK() ((TraceBaseType_t)portSET_INTERRUPT_MASK_FROM_ISR())
189
190#if (TRC_CFG_SCHEDULING_ONLY == 0)
191
198void vTraceSetQueueName(void* pvQueue, const char* szName);
199
206void vTraceSetSemaphoreName(void* pvSemaphore, const char* szName);
207
214void vTraceSetMutexName(void* pvMutex, const char* szName);
215
216#if (TRC_CFG_INCLUDE_EVENT_GROUP_EVENTS == 1)
217
224void vTraceSetEventGroupName(void* pvEventGroup, const char* szName);
225
226#else
227
231#define vTraceSetEventGroupName(__pvEventGroup, __szName) ((void)(__pvEventGroup), (void)(__szName))
232
233#endif
234
235#if (TRC_CFG_INCLUDE_STREAM_BUFFER_EVENTS == 1)
236
243void vTraceSetStreamBufferName(void* pvStreamBuffer, const char* szName);
244
251void vTraceSetMessageBufferName(void* pvMessageBuffer, const char* szName);
252
253#else
254
258#define vTraceSetStreamBufferName(__pvStreamBuffer, __szName) ((void)(__pvStreamBuffer), (void)(__szName))
259
263#define vTraceSetMessageBufferName(__pvMessageBuffer, __szName) ((void)(__pvMessageBuffer), (void)(__szName))
264
265#endif
266
267#if defined(TRC_CFG_ENABLE_STACK_MONITOR) && (TRC_CFG_ENABLE_STACK_MONITOR == 1)
268
278traceResult xTraceKernelPortGetUnusedStack(void* pvTask, TraceUnsignedBaseType_t *puxUnusedStack);
279
280#endif
281
282#else
283
287#define vTraceSetQueueName(__pvQueue, __szName) ((void)(__pvQueue), (void)(__szName))
288
292#define vTraceSetSemaphoreName(__pvSemaphore, __szName) ((void)(__pvSemaphore), (void)(__szName))
293
297#define vTraceSetMutexName(__pvMutex, __szName) ((void)(__pvMutex), (void)(__szName))
298
302#define vTraceSetEventGroupName(__pvEventGroup, __szName) ((void)(__pvEventGroup), (void)(__szName))
303
307#define vTraceSetStreamBufferName(__pvStreamBuffer, __szName) ((void)(__pvStreamBuffer), (void)(__szName))
308
312#define vTraceSetMessageBufferName(__pvMessageBuffer, __szName) ((void)(__pvMessageBuffer), (void)(__szName))
313
317#define xTraceKernelPortGetUnusedStack(pvTask, puxUnusedStack) ((void)(pvTask), (void)(puxUnusedStack))
318
319#endif
320
321#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
322
323/* Required for ISR tracing and Streaming */
324#undef INCLUDE_xTaskGetSchedulerState
325#define INCLUDE_xTaskGetSchedulerState 1
326
327#endif
328
332#define TRACE_KERNEL_VERSION 0x1AA1
333
337#define TRC_TICK_RATE_HZ configTICK_RATE_HZ /* Defined in "FreeRTOS.h" */
338
342#define TRACE_CPU_CLOCK_HZ configCPU_CLOCK_HZ /* Defined in "FreeRTOSConfig.h" */
343
344#if (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC)
348#define TRC_KERNEL_PORT_HEAP_INIT(size)
349
353#define TRC_KERNEL_PORT_HEAP_MALLOC(size) pvPortMalloc(size)
354#endif /* (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC) */
355
356#if defined(configUSE_TIMERS)
357#if (configUSE_TIMERS == 1)
358#undef INCLUDE_xTimerGetTimerDaemonTaskHandle
359#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
360#endif /* configUSE_TIMERS == 1*/
361#endif /* configUSE_TIMERS */
362
363#if (TRC_CFG_ESP_IDF_VERSION <= TRC_ESP_IDF_VERSION_4_2_0)
364 #define isQueueReceiveHookActuallyPeek xJustPeeking
365#elif (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_2_0)
366 #define isQueueReceiveHookActuallyPeek (__LINE__ < 0) /* instead of pdFALSE to fix a warning of "constant condition" */
367#endif
368
369/* Helpers needed to correctly expand names */
370#define TZ__CAT2(a,b) a ## b
371#define TZ__CAT(a,b) TZ__CAT2(a, b)
372
373/*
374 * The following xQueueGiveFromISR macro hacks make sure xQueueGiveFromISR also has a xCopyPosition parameter
375 */
376
377/* Expands name if this header is included... uxQueueType must be a macro that only exists in queue.c or whatever, and it must expand to nothing or to something that's valid in identifiers */
378#define xQueueGiveFromISR(a,b) TZ__CAT(xQueueGiveFromISR__, uxQueueType) (a,b)
379
380/* If in queue.c, the "uxQueueType" macro expands to "pcHead". queueSEND_TO_BACK is the value we need to send in */
381#define xQueueGiveFromISR__pcHead(__a, __b) MyWrapper_xQueueGiveFromISR(__a, __b, const BaseType_t xCopyPosition); \
382BaseType_t xQueueGiveFromISR(__a, __b) { return MyWrapper_xQueueGiveFromISR(xQueue, pxHigherPriorityTaskWoken, queueSEND_TO_BACK); } \
383BaseType_t MyWrapper_xQueueGiveFromISR(__a, __b, const BaseType_t xCopyPosition)
384
385/* If not in queue.c, "uxQueueType" isn't expanded */
386#define xQueueGiveFromISR__uxQueueType(__a, __b) xQueueGiveFromISR(__a,__b)
387
388#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
389
390TraceHeapHandle_t xTraceKernelPortGetSystemHeapHandle(void);
391
392/*************************************************************************/
393/* KERNEL SPECIFIC OBJECT CONFIGURATION */
394/*************************************************************************/
395
396/*******************************************************************************
397 * The event codes - should match the offline config file.
398 ******************************************************************************/
399
400/*** Event codes for streaming - should match the Tracealyzer config file *****/
401#define PSF_EVENT_NULL_EVENT 0x00
402
403#define PSF_EVENT_TRACE_START 0x01
404#define PSF_EVENT_TS_CONFIG 0x02
405#define PSF_EVENT_OBJ_NAME 0x03
406#define PSF_EVENT_TASK_PRIORITY 0x04
407#define PSF_EVENT_TASK_PRIO_INHERIT 0x05
408#define PSF_EVENT_TASK_PRIO_DISINHERIT 0x06
409#define PSF_EVENT_DEFINE_ISR 0x07
410
411#define PSF_EVENT_TASK_CREATE 0x10
412#define PSF_EVENT_QUEUE_CREATE 0x11
413#define PSF_EVENT_SEMAPHORE_BINARY_CREATE 0x12
414#define PSF_EVENT_MUTEX_CREATE 0x13
415#define PSF_EVENT_TIMER_CREATE 0x14
416#define PSF_EVENT_EVENTGROUP_CREATE 0x15
417#define PSF_EVENT_SEMAPHORE_COUNTING_CREATE 0x16
418#define PSF_EVENT_MUTEX_RECURSIVE_CREATE 0x17
419#define PSF_EVENT_STREAMBUFFER_CREATE 0x18
420#define PSF_EVENT_MESSAGEBUFFER_CREATE 0x19
421
422#define PSF_EVENT_TASK_DELETE 0x20
423#define PSF_EVENT_QUEUE_DELETE 0x21
424#define PSF_EVENT_SEMAPHORE_DELETE 0x22
425#define PSF_EVENT_MUTEX_DELETE 0x23
426#define PSF_EVENT_TIMER_DELETE 0x24
427#define PSF_EVENT_EVENTGROUP_DELETE 0x25
428#define PSF_EVENT_STREAMBUFFER_DELETE 0x28
429#define PSF_EVENT_MESSAGEBUFFER_DELETE 0x29
430
431#define PSF_EVENT_TASK_READY 0x30
432#define PSF_EVENT_NEW_TIME 0x31
433#define PSF_EVENT_NEW_TIME_SCHEDULER_SUSPENDED 0x32
434#define PSF_EVENT_ISR_BEGIN 0x33
435#define PSF_EVENT_ISR_RESUME 0x34
436#define PSF_EVENT_TS_BEGIN 0x35
437#define PSF_EVENT_TS_RESUME 0x36
438#define PSF_EVENT_TASK_ACTIVATE 0x37
439
440#define PSF_EVENT_MALLOC 0x38
441#define PSF_EVENT_FREE 0x39
442
443#define PSF_EVENT_LOWPOWER_BEGIN 0x3A
444#define PSF_EVENT_LOWPOWER_END 0x3B
445
446#define PSF_EVENT_IFE_NEXT 0x3C
447#define PSF_EVENT_IFE_DIRECT 0x3D
448
449#define PSF_EVENT_TASK_CREATE_FAILED 0x40
450#define PSF_EVENT_QUEUE_CREATE_FAILED 0x41
451#define PSF_EVENT_SEMAPHORE_BINARY_CREATE_FAILED 0x42
452#define PSF_EVENT_MUTEX_CREATE_FAILED 0x43
453#define PSF_EVENT_TIMER_CREATE_FAILED 0x44
454#define PSF_EVENT_EVENTGROUP_CREATE_FAILED 0x45
455#define PSF_EVENT_SEMAPHORE_COUNTING_CREATE_FAILED 0x46
456#define PSF_EVENT_MUTEX_RECURSIVE_CREATE_FAILED 0x47
457#define PSF_EVENT_STREAMBUFFER_CREATE_FAILED 0x49
458#define PSF_EVENT_MESSAGEBUFFER_CREATE_FAILED 0x4A
459
460#define PSF_EVENT_TIMER_DELETE_FAILED 0x48
461
462#define PSF_EVENT_QUEUE_SEND 0x50
463#define PSF_EVENT_SEMAPHORE_GIVE 0x51
464#define PSF_EVENT_MUTEX_GIVE 0x52
465
466#define PSF_EVENT_QUEUE_SEND_FAILED 0x53
467#define PSF_EVENT_SEMAPHORE_GIVE_FAILED 0x54
468#define PSF_EVENT_MUTEX_GIVE_FAILED 0x55
469
470#define PSF_EVENT_QUEUE_SEND_BLOCK 0x56
471#define PSF_EVENT_SEMAPHORE_GIVE_BLOCK 0x57
472#define PSF_EVENT_MUTEX_GIVE_BLOCK 0x58
473
474#define PSF_EVENT_QUEUE_SEND_FROMISR 0x59
475#define PSF_EVENT_SEMAPHORE_GIVE_FROMISR 0x5A
476
477#define PSF_EVENT_QUEUE_SEND_FROMISR_FAILED 0x5C
478#define PSF_EVENT_SEMAPHORE_GIVE_FROMISR_FAILED 0x5D
479
480#define PSF_EVENT_QUEUE_RECEIVE 0x60
481#define PSF_EVENT_SEMAPHORE_TAKE 0x61
482#define PSF_EVENT_MUTEX_TAKE 0x62
483
484#define PSF_EVENT_QUEUE_RECEIVE_FAILED 0x63
485#define PSF_EVENT_SEMAPHORE_TAKE_FAILED 0x64
486#define PSF_EVENT_MUTEX_TAKE_FAILED 0x65
487
488#define PSF_EVENT_QUEUE_RECEIVE_BLOCK 0x66
489#define PSF_EVENT_SEMAPHORE_TAKE_BLOCK 0x67
490#define PSF_EVENT_MUTEX_TAKE_BLOCK 0x68
491
492#define PSF_EVENT_QUEUE_RECEIVE_FROMISR 0x69
493#define PSF_EVENT_SEMAPHORE_TAKE_FROMISR 0x6A
494
495#define PSF_EVENT_QUEUE_RECEIVE_FROMISR_FAILED 0x6C
496#define PSF_EVENT_SEMAPHORE_TAKE_FROMISR_FAILED 0x6D
497
498#define PSF_EVENT_QUEUE_PEEK 0x70
499#define PSF_EVENT_SEMAPHORE_PEEK 0x71
500#define PSF_EVENT_MUTEX_PEEK 0x72
501
502#define PSF_EVENT_QUEUE_PEEK_FAILED 0x73
503#define PSF_EVENT_SEMAPHORE_PEEK_FAILED 0x74
504#define PSF_EVENT_MUTEX_PEEK_FAILED 0x75
505
506#define PSF_EVENT_QUEUE_PEEK_BLOCK 0x76
507#define PSF_EVENT_SEMAPHORE_PEEK_BLOCK 0x77
508#define PSF_EVENT_MUTEX_PEEK_BLOCK 0x78
509
510#define PSF_EVENT_TASK_DELAY_UNTIL 0x79
511#define PSF_EVENT_TASK_DELAY 0x7A
512#define PSF_EVENT_TASK_SUSPEND 0x7B
513#define PSF_EVENT_TASK_RESUME 0x7C
514#define PSF_EVENT_TASK_RESUME_FROMISR 0x7D
515
516#define PSF_EVENT_TIMER_PENDFUNCCALL 0x80
517#define PSF_EVENT_TIMER_PENDFUNCCALL_FROMISR 0x81
518#define PSF_EVENT_TIMER_PENDFUNCCALL_FAILED 0x82
519#define PSF_EVENT_TIMER_PENDFUNCCALL_FROMISR_FAILED 0x83
520
521/* We reserve 0x08 slots for this */
522#define PSF_EVENT_USER_EVENT 0x90
523
524/* We reserve 0x08 slots for this */
525#define PSF_EVENT_USER_EVENT_FIXED 0x98
526
527#define PSF_EVENT_TIMER_START 0xA0
528#define PSF_EVENT_TIMER_RESET 0xA1
529#define PSF_EVENT_TIMER_STOP 0xA2
530#define PSF_EVENT_TIMER_CHANGEPERIOD 0xA3
531#define PSF_EVENT_TIMER_START_FROMISR 0xA4
532#define PSF_EVENT_TIMER_RESET_FROMISR 0xA5
533#define PSF_EVENT_TIMER_STOP_FROMISR 0xA6
534#define PSF_EVENT_TIMER_CHANGEPERIOD_FROMISR 0xA7
535#define PSF_EVENT_TIMER_START_FAILED 0xA8
536#define PSF_EVENT_TIMER_RESET_FAILED 0xA9
537#define PSF_EVENT_TIMER_STOP_FAILED 0xAA
538#define PSF_EVENT_TIMER_CHANGEPERIOD_FAILED 0xAB
539#define PSF_EVENT_TIMER_START_FROMISR_FAILED 0xAC
540#define PSF_EVENT_TIMER_RESET_FROMISR_FAILED 0xAD
541#define PSF_EVENT_TIMER_STOP_FROMISR_FAILED 0xAE
542#define PSF_EVENT_TIMER_CHANGEPERIOD_FROMISR_FAILED 0xAF
543
544#define PSF_EVENT_EVENTGROUP_SYNC 0xB0
545#define PSF_EVENT_EVENTGROUP_WAITBITS 0xB1
546#define PSF_EVENT_EVENTGROUP_CLEARBITS 0xB2
547#define PSF_EVENT_EVENTGROUP_CLEARBITS_FROMISR 0xB3
548#define PSF_EVENT_EVENTGROUP_SETBITS 0xB4
549#define PSF_EVENT_EVENTGROUP_SETBITS_FROMISR 0xB5
550#define PSF_EVENT_EVENTGROUP_SYNC_BLOCK 0xB6
551#define PSF_EVENT_EVENTGROUP_WAITBITS_BLOCK 0xB7
552#define PSF_EVENT_EVENTGROUP_SYNC_FAILED 0xB8
553#define PSF_EVENT_EVENTGROUP_WAITBITS_FAILED 0xB9
554
555#define PSF_EVENT_QUEUE_SEND_FRONT 0xC0
556#define PSF_EVENT_QUEUE_SEND_FRONT_FAILED 0xC1
557#define PSF_EVENT_QUEUE_SEND_FRONT_BLOCK 0xC2
558#define PSF_EVENT_QUEUE_SEND_FRONT_FROMISR 0xC3
559#define PSF_EVENT_QUEUE_SEND_FRONT_FROMISR_FAILED 0xC4
560#define PSF_EVENT_MUTEX_GIVE_RECURSIVE 0xC5
561#define PSF_EVENT_MUTEX_GIVE_RECURSIVE_FAILED 0xC6
562#define PSF_EVENT_MUTEX_TAKE_RECURSIVE 0xC7
563#define PSF_EVENT_MUTEX_TAKE_RECURSIVE_FAILED 0xC8
564
565#define PSF_EVENT_TASK_NOTIFY 0xC9
566#define PSF_EVENT_TASK_NOTIFY_WAIT 0xCA
567#define PSF_EVENT_TASK_NOTIFY_WAIT_BLOCK 0xCB
568#define PSF_EVENT_TASK_NOTIFY_WAIT_FAILED 0xCC
569#define PSF_EVENT_TASK_NOTIFY_FROM_ISR 0xCD
570
571#define PSF_EVENT_TIMER_EXPIRED 0xD2
572
573#define PSF_EVENT_STREAMBUFFER_SEND 0xD3
574#define PSF_EVENT_STREAMBUFFER_SEND_BLOCK 0xD4
575#define PSF_EVENT_STREAMBUFFER_SEND_FAILED 0xD5
576#define PSF_EVENT_STREAMBUFFER_RECEIVE 0xD6
577#define PSF_EVENT_STREAMBUFFER_RECEIVE_BLOCK 0xD7
578#define PSF_EVENT_STREAMBUFFER_RECEIVE_FAILED 0xD8
579#define PSF_EVENT_STREAMBUFFER_SEND_FROM_ISR 0xD9
580#define PSF_EVENT_STREAMBUFFER_SEND_FROM_ISR_FAILED 0xDA
581#define PSF_EVENT_STREAMBUFFER_RECEIVE_FROM_ISR 0xDB
582#define PSF_EVENT_STREAMBUFFER_RECEIVE_FROM_ISR_FAILED 0xDC
583#define PSF_EVENT_STREAMBUFFER_RESET 0xDD
584
585#define PSF_EVENT_MESSAGEBUFFER_SEND 0xDE
586#define PSF_EVENT_MESSAGEBUFFER_SEND_BLOCK 0xDF
587#define PSF_EVENT_MESSAGEBUFFER_SEND_FAILED 0xE0
588#define PSF_EVENT_MESSAGEBUFFER_RECEIVE 0xE1
589#define PSF_EVENT_MESSAGEBUFFER_RECEIVE_BLOCK 0xE2
590#define PSF_EVENT_MESSAGEBUFFER_RECEIVE_FAILED 0xE3
591#define PSF_EVENT_MESSAGEBUFFER_SEND_FROM_ISR 0xE4
592#define PSF_EVENT_MESSAGEBUFFER_SEND_FROM_ISR_FAILED 0xE5
593#define PSF_EVENT_MESSAGEBUFFER_RECEIVE_FROM_ISR 0xE6
594#define PSF_EVENT_MESSAGEBUFFER_RECEIVE_FROM_ISR_FAILED 0xE7
595#define PSF_EVENT_MESSAGEBUFFER_RESET 0xE8
596
597#define PSF_EVENT_MALLOC_FAILED 0xE9
598#define PSF_EVENT_FREE_FAILED 0xEA
599
600#define PSF_EVENT_UNUSED_STACK 0xEB
601
602#define PSF_EVENT_STATEMACHINE_STATE_CREATE 0xEC
603#define PSF_EVENT_STATEMACHINE_CREATE 0xED
604#define PSF_EVENT_STATEMACHINE_STATECHANGE 0xEE
605
606#define PSF_EVENT_INTERVAL_CHANNEL_CREATE 0xEF
607#define PSF_EVENT_INTERVAL_START 0xF0
608
609#define PSF_EVENT_EXTENSION_CREATE 0xF1
610
611#define PSF_EVENT_HEAP_CREATE 0xF2
612
613#define PSF_EVENT_COUNTER_CREATE 0xF3
614#define PSF_EVENT_COUNTER_CHANGE 0xF4
615#define PSF_EVENT_COUNTER_LIMIT_EXCEEDED 0xF5
616
617#define PSF_EVENT_MUTEX_TAKE_RECURSIVE_BLOCK 0xF6
618
619#define PSF_EVENT_INTERVAL_STOP 0xF7
620#define PSF_EVENT_INTERVAL_CHANNEL_SET_CREATE 0xF8
621
622#define PSF_EVENT_RUNNABLE_REGISTER 0xF9
623#define PSF_EVENT_RUNNABLE_START 0xFA
624#define PSF_EVENT_RUNNABLE_STOP 0xFB
625
626#define PSF_EVENT_DEPENDENCY_REGISTER 0xFC
627
628#define TRC_EVENT_LAST_ID (PSF_EVENT_DEPENDENCY_REGISTER)
629
630
631/*** The trace macros for streaming ******************************************/
632
633/* A macro that will update the tick count when returning from tickless idle */
634#undef traceINCREASE_TICK_COUNT
635/* Note: This can handle time adjustments of max 2^32 ticks, i.e., 35 seconds at 120 MHz. Thus, tick-less idle periods longer than 2^32 ticks will appear "compressed" on the time line.*/
636#define traceINCREASE_TICK_COUNT( xCount ) { uint32_t uiTraceTickCount; xTraceTimestampGetOsTickCount(&uiTraceTickCount); xTraceTimestampSetOsTickCount(uiTraceTickCount + (xCount)); }
637
638#if (TRC_CFG_INCLUDE_OSTICK_EVENTS == 1)
639
640#define OS_TICK_EVENT(uxSchedulerSuspended, xTickCount) if ((uxSchedulerSuspended) == (unsigned portBASE_TYPE) pdFALSE) { prvTraceStoreEvent_Param(PSF_EVENT_NEW_TIME, xTickCount); }
641
642#else
643
644#define OS_TICK_EVENT(uxSchedulerSuspended, xTickCount)
645
646#endif
647
648/* Called on each OS tick. Will call uiPortGetTimestamp to make sure it is called at least once every OS tick. */
649#undef traceTASK_INCREMENT_TICK
650#if TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0
651
652#define traceTASK_INCREMENT_TICK( xTickCount ) \
653 if (uxSchedulerSuspended[xPortGetCoreID()] == ( unsigned portBASE_TYPE ) pdTRUE || xPendedTicks == 0) { xTraceTimestampSetOsTickCount((xTickCount) + 1); } \
654 OS_TICK_EVENT(uxSchedulerSuspended[xPortGetCoreID()], xTickCount + 1)
655
656#elif TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_0_0
657
658#define traceTASK_INCREMENT_TICK( xTickCount ) \
659 if (uxSchedulerSuspended[xPortGetCoreID()] == ( unsigned portBASE_TYPE ) pdTRUE || uxPendedTicks == 0) { xTraceTimestampSetOsTickCount((xTickCount) + 1); } \
660 OS_TICK_EVENT(uxSchedulerSuspended[xPortGetCoreID()], xTickCount + 1)
661
662#else
663
664#define traceTASK_INCREMENT_TICK( xTickCount ) \
665 if (uxSchedulerSuspended[xPortGetCoreID()] == ( unsigned portBASE_TYPE ) pdTRUE || uxMissedTicks == 0) { xTraceTimestampSetOsTickCount((xTickCount) + 1); } \
666 OS_TICK_EVENT(uxSchedulerSuspended[xPortGetCoreID()], xTickCount + 1)
667
668#endif
669
670/* Called on each task-switch */
671#undef traceTASK_SWITCHED_IN
672#define traceTASK_SWITCHED_IN() \
673 xTraceTaskSwitch(pxCurrentTCB[xPortGetCoreID()], pxCurrentTCB[xPortGetCoreID()]->uxPriority)
674
675/* Called for each task that becomes ready */
676#if (TRC_CFG_INCLUDE_READY_EVENTS == 1)
677#undef traceMOVED_TASK_TO_READY_STATE
678#define traceMOVED_TASK_TO_READY_STATE( pxTCB ) \
679 xTraceTaskReady(pxTCB);
680#endif
681
682#undef traceTASK_CREATE
683#if TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_2_0
684
685#define traceTASK_CREATE(pxNewTCB) \
686 if ((pxNewTCB) != 0) \
687 { \
688 xTraceTaskRegisterWithoutHandle((void*)(pxNewTCB), (pxNewTCB)->pcTaskName, (pxNewTCB)->uxPriority); \
689 }
690#else /* TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_2_0 */
691
692#define traceTASK_CREATE(pxNewTCB) \
693 if (pxNewTCB != 0) \
694 { \
695 xTraceTaskRegisterWithoutHandle((void*)pxNewTCB, (const char*)pcName, (uint32_t)uxPriority); \
696 }
697#endif /* TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_2_0 */
698
699/* Called in vTaskCreate, if it fails (typically if the stack can not be allocated) */
700#undef traceTASK_CREATE_FAILED
701#define traceTASK_CREATE_FAILED() \
702 prvTraceStoreEvent_None(PSF_EVENT_TASK_CREATE_FAILED)
703
704/* Called on vTaskDelete */
705#undef traceTASK_DELETE // We don't allow for filtering out "delete" events. They are important and not very frequent. Moreover, we can't exclude create events, so this should be symmetrical.
706#define traceTASK_DELETE( pxTaskToDelete ) \
707 xTraceTaskUnregisterWithoutHandle(pxTaskToDelete, (pxTaskToDelete)->uxPriority)
708
709#if (TRC_CFG_SCHEDULING_ONLY == 0)
710
711#if (defined(configUSE_TICKLESS_IDLE) && configUSE_TICKLESS_IDLE != 0)
712
713#undef traceLOW_POWER_IDLE_BEGIN
714#define traceLOW_POWER_IDLE_BEGIN() \
715 prvTraceStoreEvent_Param(PSF_EVENT_LOWPOWER_BEGIN, xExpectedIdleTime)
716
717#undef traceLOW_POWER_IDLE_END
718#define traceLOW_POWER_IDLE_END() \
719 prvTraceStoreEvent_None(PSF_EVENT_LOWPOWER_END)
720
721#endif /* (defined(configUSE_TICKLESS_IDLE) && configUSE_TICKLESS_IDLE != 0) */
722
723/* Called on vTaskSuspend */
724#undef traceTASK_SUSPEND
725#define traceTASK_SUSPEND( pxTaskToSuspend ) \
726 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_SUSPEND, pxTaskToSuspend)
727
728/* Called on vTaskDelay - note the use of FreeRTOS variable xTicksToDelay */
729#undef traceTASK_DELAY
730#define traceTASK_DELAY() \
731 prvTraceStoreEvent_Param(PSF_EVENT_TASK_DELAY, xTicksToDelay)
732
733/* Called on vTaskDelayUntil - note the use of FreeRTOS variable xTimeToWake */
734#undef traceTASK_DELAY_UNTIL
735#if TRC_CFG_ESP_IDF_VERSION < TRC_ESP_IDF_VERSION_5_1_0
736 #define traceTASK_DELAY_UNTIL() \
737 prvTraceStoreEvent_Param(PSF_EVENT_TASK_DELAY_UNTIL, 0)
738#else
739 #define traceTASK_DELAY_UNTIL(xTimeToDelay) \
740 prvTraceStoreEvent_Param(PSF_EVENT_TASK_DELAY_UNTIL, xTimeToDelay)
741#endif
742
743#if (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0)
744
745#define traceQUEUE_CREATE_HELPER() \
746 case queueQUEUE_TYPE_MUTEX: \
747 xTraceObjectRegisterWithoutHandle(PSF_EVENT_MUTEX_CREATE, (void*)pxNewQueue, "", 0); \
748 break; \
749 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
750 xTraceObjectRegisterWithoutHandle(PSF_EVENT_MUTEX_RECURSIVE_CREATE, (void*)pxNewQueue, "", 0); \
751 break;
752
753#else
754#define traceQUEUE_CREATE_HELPER()
755
756#endif /* (TRC_CFG_ESP_IDF_VERSION < TRC_ESP_IDF_VERSION_4_3_0) */
757
758/* Called in xQueueCreate, and thereby for all other object based on queues, such as semaphores. */
759#undef traceQUEUE_CREATE
760#define traceQUEUE_CREATE( pxNewQueue )\
761 switch ((pxNewQueue)->ucQueueType) \
762 { \
763 case queueQUEUE_TYPE_BASE: \
764 xTraceObjectRegisterWithoutHandle(PSF_EVENT_QUEUE_CREATE, (void*)(pxNewQueue), "", (uint32_t)uxQueueLength); \
765 break; \
766 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
767 xTraceObjectRegisterWithoutHandle(PSF_EVENT_SEMAPHORE_BINARY_CREATE, (void*)(pxNewQueue), "", 0); \
768 break; \
769 traceQUEUE_CREATE_HELPER() \
770 }
771
772#if (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0)
773
774#define traceQUEUE_CREATE_FAILED_HELPER() \
775 case queueQUEUE_TYPE_MUTEX: \
776 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_CREATE_FAILED, 0, 0); \
777 break; \
778 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
779 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_RECURSIVE_CREATE_FAILED, 0, 0); \
780 break;
781
782#else
783
784#define traceQUEUE_CREATE_FAILED_HELPER()
785
786#endif /* (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0) */
787
788/* Called in xQueueCreate, if the queue creation fails */
789#undef traceQUEUE_CREATE_FAILED
790#define traceQUEUE_CREATE_FAILED( queueType ) \
791 switch (queueType) \
792 { \
793 case queueQUEUE_TYPE_BASE: \
794 prvTraceStoreEvent_HandleParam(PSF_EVENT_QUEUE_CREATE_FAILED, 0, uxQueueLength); \
795 break; \
796 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
797 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_BINARY_CREATE_FAILED, 0, 0); \
798 break; \
799 traceQUEUE_CREATE_FAILED_HELPER() \
800 }
801
802#undef traceQUEUE_DELETE // We don't allow for filtering out "delete" events. They are important and not very frequent. Moreover, we can't exclude create events, so this should be symmetrical.
803#define traceQUEUE_DELETE( pxQueue ) \
804 switch ((pxQueue)->ucQueueType) \
805 { \
806 case queueQUEUE_TYPE_BASE: \
807 xTraceObjectUnregisterWithoutHandle(PSF_EVENT_QUEUE_DELETE, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
808 break; \
809 case queueQUEUE_TYPE_MUTEX: \
810 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
811 xTraceObjectUnregisterWithoutHandle(PSF_EVENT_MUTEX_DELETE, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
812 break; \
813 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
814 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
815 xTraceObjectUnregisterWithoutHandle(PSF_EVENT_SEMAPHORE_DELETE, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
816 break; \
817 }
818
819/* Called in xQueueCreateCountingSemaphore, if the queue creation fails */
820#undef traceCREATE_COUNTING_SEMAPHORE
821#define traceCREATE_COUNTING_SEMAPHORE() \
822 xTraceObjectRegisterWithoutHandle(PSF_EVENT_SEMAPHORE_COUNTING_CREATE, (void*)xHandle, "", (uint32_t)uxMaxCount)
823
824#undef traceCREATE_COUNTING_SEMAPHORE_FAILED
825#define traceCREATE_COUNTING_SEMAPHORE_FAILED() \
826 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_COUNTING_CREATE_FAILED, 0, uxMaxCount);
827
828
829/* This macro is not necessary as of FreeRTOS v9.0.0 */
830#if (TRC_CFG_ESP_IDF_VERSION < TRC_ESP_IDF_VERSION_4_3_0)
831
832/* Called in xQueueCreateMutex, and thereby also from xSemaphoreCreateMutex and xSemaphoreCreateRecursiveMutex */
833#undef traceCREATE_MUTEX
834#define traceCREATE_MUTEX( pxNewQueue ) \
835 switch (pxNewQueue->ucQueueType) \
836 { \
837 case queueQUEUE_TYPE_MUTEX: \
838 xTraceObjectRegisterWithoutHandle(PSF_EVENT_MUTEX_CREATE, (void*)(pxNewQueue), "", 0); \
839 break; \
840 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
841 xTraceObjectRegisterWithoutHandle(PSF_EVENT_MUTEX_RECURSIVE_CREATE, (void*)(pxNewQueue), "", 0); \
842 break; \
843 }
844
845/* Called in xQueueCreateMutex when the operation fails (when memory allocation fails) */
846#undef traceCREATE_MUTEX_FAILED
847#define traceCREATE_MUTEX_FAILED() \
848 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_CREATE_FAILED, 0, 0)
849#endif /* (TRC_CFG_ESP_IDF_VERSION < TRC_ESP_IDF_VERSION_4_3_0) */
850
851/* Called when the Mutex can not be given, since not holder */
852#undef traceGIVE_MUTEX_RECURSIVE_FAILED
853#define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ) \
854 prvTraceStoreEvent_Handle(PSF_EVENT_MUTEX_GIVE_RECURSIVE_FAILED, (void*)(pxMutex))
855
856/* Called when a message is sent to a queue */ /* CS IS NEW ! */
857#undef traceQUEUE_SEND
858#define traceQUEUE_SEND( pxQueue ) \
859 switch ((pxQueue)->ucQueueType) \
860 { \
861 case queueQUEUE_TYPE_BASE: \
862 prvTraceStoreEvent_HandleParam(xCopyPosition == queueSEND_TO_BACK ? PSF_EVENT_QUEUE_SEND : PSF_EVENT_QUEUE_SEND_FRONT, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting + 1); \
863 break; \
864 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
865 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
866 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_GIVE, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting + 1); \
867 break; \
868 case queueQUEUE_TYPE_MUTEX: \
869 prvTraceStoreEvent_Handle(PSF_EVENT_MUTEX_GIVE, (void*)(pxQueue)); \
870 break; \
871 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
872 prvTraceStoreEvent_Handle(PSF_EVENT_MUTEX_GIVE_RECURSIVE, (void*)(pxQueue)); \
873 break; \
874 }
875
876#undef traceQUEUE_SET_SEND
877#define traceQUEUE_SET_SEND( pxQueue ) \
878 prvTraceStoreEvent_HandleParam(PSF_EVENT_QUEUE_SEND, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting + 1)
879
880/* Called when a message failed to be sent to a queue (timeout) */
881#undef traceQUEUE_SEND_FAILED
882#define traceQUEUE_SEND_FAILED( pxQueue ) \
883 switch ((pxQueue)->ucQueueType) \
884 { \
885 case queueQUEUE_TYPE_BASE: \
886 prvTraceStoreEvent_HandleParam(xCopyPosition == queueSEND_TO_BACK ? PSF_EVENT_QUEUE_SEND_FAILED : PSF_EVENT_QUEUE_SEND_FRONT_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
887 break; \
888 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
889 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
890 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_GIVE_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
891 break; \
892 case queueQUEUE_TYPE_MUTEX: \
893 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
894 prvTraceStoreEvent_Handle(PSF_EVENT_MUTEX_GIVE_FAILED, (void*)(pxQueue)); \
895 break; \
896 }
897
898/* Called when the task is blocked due to a send operation on a full queue */
899#undef traceBLOCKING_ON_QUEUE_SEND
900#define traceBLOCKING_ON_QUEUE_SEND( pxQueue ) \
901 switch ((pxQueue)->ucQueueType) \
902 { \
903 case queueQUEUE_TYPE_BASE: \
904 prvTraceStoreEvent_HandleParam(xCopyPosition == queueSEND_TO_BACK ? PSF_EVENT_QUEUE_SEND_BLOCK : PSF_EVENT_QUEUE_SEND_FRONT_BLOCK, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
905 break; \
906 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
907 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
908 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_GIVE_BLOCK, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
909 break; \
910 case queueQUEUE_TYPE_MUTEX: \
911 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
912 prvTraceStoreEvent_Handle(PSF_EVENT_MUTEX_GIVE_BLOCK, (void*)(pxQueue)); \
913 break; \
914 }
915
916/* Called when a message is sent from interrupt context, e.g., using xQueueSendFromISR */
917#undef traceQUEUE_SEND_FROM_ISR
918#define traceQUEUE_SEND_FROM_ISR( pxQueue ) \
919 switch ((pxQueue)->ucQueueType) \
920 { \
921 case queueQUEUE_TYPE_BASE: \
922 prvTraceStoreEvent_HandleParam(xCopyPosition == queueSEND_TO_BACK ? PSF_EVENT_QUEUE_SEND_FROMISR : PSF_EVENT_QUEUE_SEND_FRONT_FROMISR, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting + 1); \
923 break; \
924 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
925 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
926 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_GIVE_FROMISR, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting + 1); \
927 break; \
928 }
929#undef traceQUEUE_GIVE_FROM_ISR
930#define traceQUEUE_GIVE_FROM_ISR( pxQueue ) traceQUEUE_SEND_FROM_ISR(pxQueue)
931
932/* Called when a message send from interrupt context fails (since the queue was full) */
933#undef traceQUEUE_SEND_FROM_ISR_FAILED
934#define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) \
935 switch ((pxQueue)->ucQueueType) \
936 { \
937 case queueQUEUE_TYPE_BASE: \
938 prvTraceStoreEvent_HandleParam(xCopyPosition == queueSEND_TO_BACK ? PSF_EVENT_QUEUE_SEND_FROMISR_FAILED : PSF_EVENT_QUEUE_SEND_FRONT_FROMISR_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
939 break; \
940 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
941 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
942 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_GIVE_FROMISR_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
943 break; \
944 }
945#undef traceQUEUE_GIVE_FROM_ISR_FAILED
946#define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ) traceQUEUE_SEND_FROM_ISR_FAILED(pxQueue)
947
948/* Called when a message is received from a queue */
949#undef traceQUEUE_RECEIVE
950#define traceQUEUE_RECEIVE( pxQueue ) \
951 switch ((pxQueue)->ucQueueType) \
952 { \
953 case queueQUEUE_TYPE_BASE: \
954 if (isQueueReceiveHookActuallyPeek) \
955 { \
956 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_QUEUE_PEEK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting - 1); \
957 } \
958 else\
959 { \
960 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_QUEUE_RECEIVE, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting - 1); \
961 } \
962 break; \
963 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
964 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
965 if (isQueueReceiveHookActuallyPeek) \
966 { \
967 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_SEMAPHORE_PEEK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting - 1); \
968 } \
969 else \
970 { \
971 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_SEMAPHORE_TAKE, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting - 1); \
972 } \
973 break; \
974 case queueQUEUE_TYPE_MUTEX: \
975 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK : PSF_EVENT_MUTEX_TAKE, (void*)(pxQueue), xTicksToWait); \
976 break; \
977 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
978 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK : PSF_EVENT_MUTEX_TAKE_RECURSIVE, (void*)(pxQueue), xTicksToWait); \
979 break; \
980 }
981#undef traceQUEUE_SEMAPHORE_RECEIVE
982#define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) traceQUEUE_RECEIVE( pxQueue )
983
984/* Called when a receive operation on a queue fails (timeout) */
985#undef traceQUEUE_RECEIVE_FAILED
986#define traceQUEUE_RECEIVE_FAILED( pxQueue ) \
987 switch ((pxQueue)->ucQueueType) \
988 { \
989 case queueQUEUE_TYPE_BASE: \
990 prvTraceStoreEvent_HandleParamParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_QUEUE_PEEK_FAILED : PSF_EVENT_QUEUE_RECEIVE_FAILED, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
991 break; \
992 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
993 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
994 prvTraceStoreEvent_HandleParamParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_SEMAPHORE_PEEK_FAILED : PSF_EVENT_SEMAPHORE_TAKE_FAILED, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
995 break; \
996 case queueQUEUE_TYPE_MUTEX: \
997 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK_FAILED : PSF_EVENT_MUTEX_TAKE_FAILED, (void*)(pxQueue), xTicksToWait); \
998 break; \
999 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
1000 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK_FAILED : PSF_EVENT_MUTEX_TAKE_RECURSIVE_FAILED, (void*)(pxQueue), xTicksToWait); \
1001 break; \
1002 }
1003
1004/* Called when the task is blocked due to a receive operation on an empty queue */
1005#undef traceBLOCKING_ON_QUEUE_RECEIVE
1006#define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) \
1007 switch ((pxQueue)->ucQueueType) \
1008 { \
1009 case queueQUEUE_TYPE_BASE: \
1010 prvTraceStoreEvent_HandleParamParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_QUEUE_PEEK_BLOCK : PSF_EVENT_QUEUE_RECEIVE_BLOCK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1011 break; \
1012 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1013 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1014 prvTraceStoreEvent_HandleParamParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_SEMAPHORE_PEEK_BLOCK : PSF_EVENT_SEMAPHORE_TAKE_BLOCK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1015 break; \
1016 case queueQUEUE_TYPE_MUTEX: \
1017 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK_BLOCK : PSF_EVENT_MUTEX_TAKE_BLOCK, (void*)(pxQueue), xTicksToWait); \
1018 break; \
1019 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
1020 prvTraceStoreEvent_HandleParam(isQueueReceiveHookActuallyPeek ? PSF_EVENT_MUTEX_PEEK_BLOCK : PSF_EVENT_MUTEX_TAKE_RECURSIVE_BLOCK, (void*)(pxQueue), xTicksToWait); \
1021 break; \
1022 }
1023
1024#if (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0)
1025
1026/* Called when a peek operation on a queue fails (timeout) */
1027#undef traceQUEUE_PEEK_FAILED
1028#define traceQUEUE_PEEK_FAILED( pxQueue ) \
1029 switch ((pxQueue)->ucQueueType) \
1030 { \
1031 case queueQUEUE_TYPE_BASE: \
1032 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_QUEUE_PEEK_FAILED, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1033 break; \
1034 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1035 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1036 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_SEMAPHORE_PEEK_FAILED, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1037 break; \
1038 case queueQUEUE_TYPE_MUTEX: \
1039 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
1040 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_PEEK_FAILED, (void*)(pxQueue), xTicksToWait); \
1041 break; \
1042 }
1043
1044/* Called when the task is blocked due to a peek operation on an empty queue */
1045#undef traceBLOCKING_ON_QUEUE_PEEK
1046#define traceBLOCKING_ON_QUEUE_PEEK( pxQueue ) \
1047 switch ((pxQueue)->ucQueueType) \
1048 { \
1049 case queueQUEUE_TYPE_BASE: \
1050 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_QUEUE_PEEK_BLOCK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1051 break; \
1052 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1053 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1054 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_SEMAPHORE_PEEK_BLOCK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1055 break; \
1056 case queueQUEUE_TYPE_MUTEX: \
1057 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
1058 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_PEEK_BLOCK, (void*)(pxQueue), xTicksToWait); \
1059 break; \
1060 }
1061
1062#endif
1063
1064/* Called when a message is received in interrupt context, e.g., using xQueueReceiveFromISR */
1065#undef traceQUEUE_RECEIVE_FROM_ISR
1066#define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) \
1067 switch ((pxQueue)->ucQueueType) \
1068 { \
1069 case queueQUEUE_TYPE_BASE: \
1070 prvTraceStoreEvent_HandleParam(PSF_EVENT_QUEUE_RECEIVE_FROMISR, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting - 1); \
1071 break; \
1072 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1073 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1074 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_TAKE_FROMISR, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting - 1); \
1075 break; \
1076 }
1077
1078/* Called when a message receive from interrupt context fails (since the queue was empty) */
1079#undef traceQUEUE_RECEIVE_FROM_ISR_FAILED
1080#define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) \
1081 switch ((pxQueue)->ucQueueType) \
1082 { \
1083 case queueQUEUE_TYPE_BASE: \
1084 prvTraceStoreEvent_HandleParam(PSF_EVENT_QUEUE_RECEIVE_FROMISR_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
1085 break; \
1086 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1087 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1088 prvTraceStoreEvent_HandleParam(PSF_EVENT_SEMAPHORE_TAKE_FROMISR_FAILED, (void*)(pxQueue), (pxQueue)->uxMessagesWaiting); \
1089 break; \
1090 }
1091
1092/* Called on xQueuePeek */
1093#undef traceQUEUE_PEEK
1094#define traceQUEUE_PEEK( pxQueue ) \
1095 switch ((pxQueue)->ucQueueType) \
1096 { \
1097 case queueQUEUE_TYPE_BASE: \
1098 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_QUEUE_PEEK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1099 break; \
1100 case queueQUEUE_TYPE_BINARY_SEMAPHORE: \
1101 case queueQUEUE_TYPE_COUNTING_SEMAPHORE: \
1102 prvTraceStoreEvent_HandleParamParam(PSF_EVENT_SEMAPHORE_PEEK, (void*)(pxQueue), xTicksToWait, (pxQueue)->uxMessagesWaiting); \
1103 break; \
1104 case queueQUEUE_TYPE_MUTEX: \
1105 case queueQUEUE_TYPE_RECURSIVE_MUTEX: \
1106 prvTraceStoreEvent_HandleParam(PSF_EVENT_MUTEX_PEEK, (void*)(pxQueue), xTicksToWait); \
1107 break; \
1108 }
1109
1110/* Called in vTaskPrioritySet */
1111#undef traceTASK_PRIORITY_SET
1112#define traceTASK_PRIORITY_SET( pxTask, uxNewPriority ) \
1113 xTraceTaskSetPriorityWithoutHandle(pxTask, uxNewPriority)
1114
1115/* Called in vTaskPriorityInherit, which is called by Mutex operations */
1116#undef traceTASK_PRIORITY_INHERIT
1117#define traceTASK_PRIORITY_INHERIT( pxTask, uxNewPriority ) \
1118 prvTraceStoreEvent_HandleParam(PSF_EVENT_TASK_PRIO_INHERIT, (void*)(pxTask), uxNewPriority)
1119
1120/* Called in vTaskPriorityDisinherit, which is called by Mutex operations */
1121#undef traceTASK_PRIORITY_DISINHERIT
1122#define traceTASK_PRIORITY_DISINHERIT( pxTask, uxNewPriority ) \
1123 prvTraceStoreEvent_HandleParam(PSF_EVENT_TASK_PRIO_DISINHERIT, (void*)(pxTask), uxNewPriority)
1124
1125/* Called in vTaskResume */
1126#undef traceTASK_RESUME
1127#define traceTASK_RESUME( pxTaskToResume ) \
1128 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_RESUME, (void*)(pxTaskToResume))
1129
1130/* Called in vTaskResumeFromISR */
1131#undef traceTASK_RESUME_FROM_ISR
1132#define traceTASK_RESUME_FROM_ISR( pxTaskToResume ) \
1133 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_RESUME_FROMISR, (void*)(pxTaskToResume))
1134
1135#if (TRC_CFG_INCLUDE_MEMMANG_EVENTS == 1)
1136
1137#undef traceMALLOC
1138#define traceMALLOC( pvAddress, uiSize ) \
1139 if (xTraceIsRecorderEnabled()) \
1140 { \
1141 xTraceHeapAlloc(xTraceKernelPortGetSystemHeapHandle(), pvAddress, uiSize); \
1142 }
1143
1144#undef traceFREE
1145#define traceFREE( pvAddress, uiSize ) \
1146 if (xTraceIsRecorderEnabled()) \
1147 { \
1148 xTraceHeapFree(xTraceKernelPortGetSystemHeapHandle(), pvAddress, uiSize); \
1149 }
1150
1151#endif
1152
1153#if (TRC_CFG_INCLUDE_TIMER_EVENTS == 1)
1154
1155/* Called in timer.c - xTimerCreate */
1156#undef traceTIMER_CREATE
1157#define traceTIMER_CREATE(tmr) \
1158 xTraceObjectRegisterWithoutHandle(PSF_EVENT_TIMER_CREATE, (void*)(tmr), (const char*)(tmr)->pcTimerName, (uint32_t)(tmr)->xTimerPeriodInTicks)
1159
1160#undef traceTIMER_CREATE_FAILED
1161#define traceTIMER_CREATE_FAILED() \
1162 prvTraceStoreEvent_None(PSF_EVENT_TIMER_CREATE_FAILED);
1163
1164#if (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_0_0)
1165
1166#define traceTIMER_COMMAND_SEND_8_0_CASES(tmr) \
1167 case tmrCOMMAND_RESET: \
1168 prvTraceStoreEvent_HandleParam((xReturn == pdPASS) ? PSF_EVENT_TIMER_RESET : PSF_EVENT_TIMER_RESET_FAILED, (void*)(tmr), xOptionalValue); \
1169 break; \
1170 case tmrCOMMAND_START_FROM_ISR: \
1171 prvTraceStoreEvent_HandleParam((xReturn == pdPASS) ? PSF_EVENT_TIMER_START_FROMISR : PSF_EVENT_TIMER_START_FROMISR_FAILED, (void*)(tmr), xOptionalValue); \
1172 break; \
1173 case tmrCOMMAND_RESET_FROM_ISR: \
1174 prvTraceStoreEvent_HandleParam((xReturn == pdPASS) ? PSF_EVENT_TIMER_RESET_FROMISR : PSF_EVENT_TIMER_RESET_FROMISR_FAILED, (void*)(tmr), xOptionalValue); \
1175 break; \
1176 case tmrCOMMAND_STOP_FROM_ISR: \
1177 prvTraceStoreEvent_HandleParam((xReturn == pdPASS) ? PSF_EVENT_TIMER_STOP_FROMISR : PSF_EVENT_TIMER_STOP_FROMISR_FAILED, (void*)(tmr), xOptionalValue); \
1178 break; \
1179 case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR: \
1180 prvTraceStoreEvent_HandleParam((xReturn == pdPASS) ? PSF_EVENT_TIMER_CHANGEPERIOD_FROMISR : PSF_EVENT_TIMER_CHANGEPERIOD_FROMISR_FAILED, (void*)(tmr), xOptionalValue); \
1181 break;
1182#else
1183
1184#define traceTIMER_COMMAND_SEND_8_0_CASES(tmr)
1185
1186#endif
1187
1188/* Note that xCommandID can never be tmrCOMMAND_EXECUTE_CALLBACK (-1) since the trace macro is not called in that case */
1189#undef traceTIMER_COMMAND_SEND
1190#define traceTIMER_COMMAND_SEND(tmr, xCommandID, xOptionalValue, xReturn) \
1191 switch(xCommandID) \
1192 { \
1193 case tmrCOMMAND_START: \
1194 prvTraceStoreEvent_Handle(((xReturn) == pdPASS) ? PSF_EVENT_TIMER_START : PSF_EVENT_TIMER_START_FAILED, (void*)(tmr)); \
1195 break; \
1196 case tmrCOMMAND_STOP: \
1197 prvTraceStoreEvent_Handle(((xReturn) == pdPASS) ? PSF_EVENT_TIMER_STOP : PSF_EVENT_TIMER_STOP_FAILED, (void*)(tmr)); \
1198 break; \
1199 case tmrCOMMAND_CHANGE_PERIOD: \
1200 prvTraceStoreEvent_HandleParam(((xReturn) == pdPASS) ? PSF_EVENT_TIMER_CHANGEPERIOD : PSF_EVENT_TIMER_CHANGEPERIOD_FAILED, (void*)(tmr), xOptionalValue); \
1201 break; \
1202 case tmrCOMMAND_DELETE: \
1203 xTraceObjectUnregisterWithoutHandle(((xReturn) == pdPASS) ? PSF_EVENT_TIMER_DELETE : PSF_EVENT_TIMER_DELETE_FAILED, (void*)(tmr), 0); \
1204 break; \
1205 traceTIMER_COMMAND_SEND_8_0_CASES(tmr) \
1206 }
1207
1208#undef traceTIMER_EXPIRED
1209#define traceTIMER_EXPIRED(tmr) \
1210 prvTraceStoreEvent_HandleParam(PSF_EVENT_TIMER_EXPIRED, (void*)(tmr), (uint32_t)((tmr)->pxCallbackFunction))
1211
1212#endif
1213
1214
1215#if (TRC_CFG_INCLUDE_PEND_FUNC_CALL_EVENTS == 1)
1216
1217#undef tracePEND_FUNC_CALL
1218#define tracePEND_FUNC_CALL(func, arg1, arg2, ret) \
1219 prvTraceStoreEvent_Param(((ret) == pdPASS) ? PSF_EVENT_TIMER_PENDFUNCCALL : PSF_EVENT_TIMER_PENDFUNCCALL_FAILED, (uint32_t)(func))
1220
1221#undef tracePEND_FUNC_CALL_FROM_ISR
1222#define tracePEND_FUNC_CALL_FROM_ISR(func, arg1, arg2, ret) \
1223 prvTraceStoreEvent_Param(((ret) == pdPASS) ? PSF_EVENT_TIMER_PENDFUNCCALL_FROMISR : PSF_EVENT_TIMER_PENDFUNCCALL_FROMISR_FAILED, (uint32_t)(func))
1224
1225#endif
1226
1227#if (TRC_CFG_INCLUDE_EVENT_GROUP_EVENTS == 1)
1228
1229#undef traceEVENT_GROUP_CREATE
1230#define traceEVENT_GROUP_CREATE(eg) \
1231 xTraceObjectRegisterWithoutHandle(PSF_EVENT_EVENTGROUP_CREATE, (void*)(eg), 0, (uint32_t)(eg)->uxEventBits)
1232
1233#undef traceEVENT_GROUP_DELETE
1234#define traceEVENT_GROUP_DELETE(eg) \
1235 xTraceObjectUnregisterWithoutHandle(PSF_EVENT_EVENTGROUP_DELETE, (void*)(eg), (uint32_t)(eg)->uxEventBits)
1236
1237#undef traceEVENT_GROUP_CREATE_FAILED
1238#define traceEVENT_GROUP_CREATE_FAILED() \
1239 prvTraceStoreEvent_None(PSF_EVENT_EVENTGROUP_CREATE_FAILED)
1240
1241#undef traceEVENT_GROUP_SYNC_BLOCK
1242#define traceEVENT_GROUP_SYNC_BLOCK(eg, bitsToSet, bitsToWaitFor) \
1243 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_SYNC_BLOCK, (void*)(eg), bitsToWaitFor)
1244
1245#undef traceEVENT_GROUP_SYNC_END
1246#define traceEVENT_GROUP_SYNC_END(eg, bitsToSet, bitsToWaitFor, wasTimeout) \
1247 prvTraceStoreEvent_HandleParam(((wasTimeout) != pdTRUE) ? PSF_EVENT_EVENTGROUP_SYNC : PSF_EVENT_EVENTGROUP_SYNC_FAILED, (void*)(eg), bitsToWaitFor)
1248
1249#undef traceEVENT_GROUP_WAIT_BITS_BLOCK
1250#define traceEVENT_GROUP_WAIT_BITS_BLOCK(eg, bitsToWaitFor) \
1251 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_WAITBITS_BLOCK, (void*)(eg), bitsToWaitFor)
1252
1253#undef traceEVENT_GROUP_WAIT_BITS_END
1254#define traceEVENT_GROUP_WAIT_BITS_END(eg, bitsToWaitFor, wasTimeout) \
1255 prvTraceStoreEvent_HandleParam(((wasTimeout) != pdTRUE) ? PSF_EVENT_EVENTGROUP_WAITBITS : PSF_EVENT_EVENTGROUP_WAITBITS_FAILED, (void*)(eg), bitsToWaitFor)
1256
1257#undef traceEVENT_GROUP_CLEAR_BITS
1258#define traceEVENT_GROUP_CLEAR_BITS(eg, bitsToClear) \
1259 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_CLEARBITS, (void*)(eg), bitsToClear)
1260
1261#undef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR
1262#define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR(eg, bitsToClear) \
1263 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_CLEARBITS_FROMISR, (void*)(eg), bitsToClear)
1264
1265#undef traceEVENT_GROUP_SET_BITS
1266#define traceEVENT_GROUP_SET_BITS(eg, bitsToSet) \
1267 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_SETBITS, (void*)(eg), bitsToSet)
1268
1269#undef traceEVENT_GROUP_SET_BITS_FROM_ISR
1270#define traceEVENT_GROUP_SET_BITS_FROM_ISR(eg, bitsToSet) \
1271 prvTraceStoreEvent_HandleParam(PSF_EVENT_EVENTGROUP_SETBITS_FROMISR, (void*)(eg), bitsToSet)
1272
1273#endif
1274
1275#undef traceTASK_NOTIFY
1276#if (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0)
1277
1278#define traceTASK_NOTIFY(index) \
1279 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_NOTIFY, (void*)xTaskToNotify)
1280
1281#else
1282
1283#define traceTASK_NOTIFY() \
1284 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_NOTIFY, (void*)xTaskToNotify)
1285
1286#endif
1287
1288#undef traceTASK_NOTIFY_FROM_ISR
1289#if (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0)
1290
1291#define traceTASK_NOTIFY_FROM_ISR(index) \
1292 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_NOTIFY_FROM_ISR, (void*)xTaskToNotify)
1293
1294#else
1295
1296#define traceTASK_NOTIFY_FROM_ISR() \
1297 prvTraceStoreEvent_Handle(PSF_EVENT_TASK_NOTIFY_FROM_ISR, (void*)xTaskToNotify)
1298
1299#endif
1300
1301/* NOTIFY and NOTIFY_GIVE will be handled identically */
1302#undef traceTASK_NOTIFY_GIVE_FROM_ISR
1303#define traceTASK_NOTIFY_GIVE_FROM_ISR traceTASK_NOTIFY_FROM_ISR
1304
1305#undef traceTASK_NOTIFY_WAIT
1306#if (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0)
1307
1308#define traceTASK_NOTIFY_WAIT(index) \
1309 prvTraceStoreEvent_HandleParam(pxCurrentTCB[xPortGetCoreID()]->ucNotifyState[index] == taskNOTIFICATION_RECEIVED ? PSF_EVENT_TASK_NOTIFY_WAIT : PSF_EVENT_TASK_NOTIFY_WAIT_FAILED, (void*)pxCurrentTCB[xPortGetCoreID()], xTicksToWait)
1310
1311#elif (TRC_CFG_ESP_IDF_VERSION >= TRC_ESP_IDF_VERSION_4_3_0)
1312
1313#define traceTASK_NOTIFY_WAIT() \
1314 prvTraceStoreEvent_HandleParam(pxCurrentTCB[xPortGetCoreID()]->ucNotifyState == taskNOTIFICATION_RECEIVED ? PSF_EVENT_TASK_NOTIFY_WAIT : PSF_EVENT_TASK_NOTIFY_WAIT_FAILED, (void*)pxCurrentTCB, xTicksToWait)
1315
1316#else
1317
1318#define traceTASK_NOTIFY_WAIT() \
1319 prvTraceStoreEvent_HandleParam(pxCurrentTCB[xPortGetCoreID()]->eNotifyState == eNotified ? PSF_EVENT_TASK_NOTIFY_WAIT : PSF_EVENT_TASK_NOTIFY_WAIT_FAILED, (void*)pxCurrentTCB, xTicksToWait)
1320
1321#endif
1322
1323/* WAIT and TAKE will be handled identically */
1324#undef traceTASK_NOTIFY_TAKE
1325#define traceTASK_NOTIFY_TAKE traceTASK_NOTIFY_WAIT
1326
1327#undef traceTASK_NOTIFY_WAIT_BLOCK
1328#if (TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0)
1329
1330#define traceTASK_NOTIFY_WAIT_BLOCK(index) \
1331 prvTraceStoreEvent_HandleParam(PSF_EVENT_TASK_NOTIFY_WAIT_BLOCK, (void*)pxCurrentTCB[xPortGetCoreID()], xTicksToWait)
1332
1333#else /* TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0 */
1334
1335#define traceTASK_NOTIFY_WAIT_BLOCK() \
1336 prvTraceStoreEvent_HandleParam(PSF_EVENT_TASK_NOTIFY_WAIT_BLOCK, (void*)pxCurrentTCB[xPortGetCoreID()], xTicksToWait)
1337
1338#endif /* TRC_CFG_ESP_IDF_VERSION > TRC_ESP_IDF_VERSION_4_3_0 */
1339
1340/* WAIT_BLOCK and TAKE_BLOCK will be handled identically */
1341#undef traceTASK_NOTIFY_TAKE_BLOCK
1342#define traceTASK_NOTIFY_TAKE_BLOCK traceTASK_NOTIFY_WAIT_BLOCK
1343
1344#undef traceQUEUE_REGISTRY_ADD
1345#define traceQUEUE_REGISTRY_ADD(object, name) \
1346 xTraceObjectSetNameWithoutHandle(object, (const char*)(name));
1347
1348#if (TRC_CFG_INCLUDE_STREAM_BUFFER_EVENTS == 1)
1349
1350#undef traceSTREAM_BUFFER_CREATE
1351#define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) \
1352 xTraceObjectRegisterWithoutHandle((xIsMessageBuffer) == 1 ? PSF_EVENT_MESSAGEBUFFER_CREATE : PSF_EVENT_STREAMBUFFER_CREATE, (void*)(pxStreamBuffer), "", (uint32_t)xBufferSizeBytes)
1353
1354#undef traceSTREAM_BUFFER_CREATE_FAILED
1355#define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) \
1356 prvTraceStoreEvent_HandleParam((xIsMessageBuffer) == 1 ? PSF_EVENT_MESSAGEBUFFER_CREATE_FAILED : PSF_EVENT_STREAMBUFFER_CREATE_FAILED, 0 , xBufferSizeBytes)
1357
1358#undef traceSTREAM_BUFFER_CREATE_STATIC_FAILED
1359#define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer ) \
1360 traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer )
1361
1362#undef traceSTREAM_BUFFER_DELETE
1363#define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) \
1364 xTraceObjectUnregisterWithoutHandle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_DELETE : PSF_EVENT_STREAMBUFFER_DELETE, (void*)(xStreamBuffer), prvBytesInBuffer(xStreamBuffer));
1365
1366#undef traceSTREAM_BUFFER_RESET
1367#define traceSTREAM_BUFFER_RESET( xStreamBuffer ) \
1368 prvTraceStoreEvent_HandleParam(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RESET : PSF_EVENT_STREAMBUFFER_RESET, (void*)(xStreamBuffer), 0)
1369
1370#undef traceSTREAM_BUFFER_SEND
1371#define traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn ) \
1372 prvTraceStoreEvent_HandleParam(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_SEND : PSF_EVENT_STREAMBUFFER_SEND, (void*)(xStreamBuffer), prvBytesInBuffer(xStreamBuffer))
1373
1374#undef traceBLOCKING_ON_STREAM_BUFFER_SEND
1375#define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ) \
1376 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_SEND_BLOCK : PSF_EVENT_STREAMBUFFER_SEND_BLOCK, (void*)(xStreamBuffer))
1377
1378#undef traceSTREAM_BUFFER_SEND_FAILED
1379#define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) \
1380 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_SEND_FAILED : PSF_EVENT_STREAMBUFFER_SEND_FAILED, (void*)(xStreamBuffer))
1381
1382#undef traceSTREAM_BUFFER_RECEIVE
1383#define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) \
1384 prvTraceStoreEvent_HandleParam(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RECEIVE: PSF_EVENT_STREAMBUFFER_RECEIVE, (void*)(xStreamBuffer), prvBytesInBuffer(xStreamBuffer))
1385
1386#undef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE
1387#define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ) \
1388 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RECEIVE_BLOCK: PSF_EVENT_STREAMBUFFER_RECEIVE_BLOCK, (void*)(xStreamBuffer))
1389
1390#undef traceSTREAM_BUFFER_RECEIVE_FAILED
1391#define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) \
1392 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RECEIVE_FAILED: PSF_EVENT_STREAMBUFFER_RECEIVE_FAILED, (void*)(xStreamBuffer))
1393
1394#undef traceSTREAM_BUFFER_SEND_FROM_ISR
1395#define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xReturn ) \
1396 if ( (xReturn) > ( size_t ) 0 ) \
1397 { \
1398 prvTraceStoreEvent_HandleParam(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_SEND_FROM_ISR : PSF_EVENT_STREAMBUFFER_SEND_FROM_ISR, (void*)(xStreamBuffer), prvBytesInBuffer(xStreamBuffer)); \
1399 } \
1400 else \
1401 { \
1402 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_SEND_FROM_ISR_FAILED : PSF_EVENT_STREAMBUFFER_SEND_FROM_ISR_FAILED, (void*)(xStreamBuffer)); \
1403 }
1404
1405#undef traceSTREAM_BUFFER_RECEIVE_FROM_ISR
1406#define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) \
1407 if ( (xReceivedLength) > ( size_t ) 0 ) \
1408 { \
1409 prvTraceStoreEvent_HandleParam(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RECEIVE_FROM_ISR : PSF_EVENT_STREAMBUFFER_RECEIVE_FROM_ISR, (void*)(xStreamBuffer), prvBytesInBuffer(xStreamBuffer)); \
1410 } \
1411 else \
1412 { \
1413 prvTraceStoreEvent_Handle(prvGetStreamBufferType(xStreamBuffer) > 0 ? PSF_EVENT_MESSAGEBUFFER_RECEIVE_FROM_ISR_FAILED : PSF_EVENT_STREAMBUFFER_RECEIVE_FROM_ISR_FAILED, (void*)(xStreamBuffer)); \
1414 }
1415
1416#endif
1417
1418#endif
1419
1420#endif
1421
1422#else
1423
1424/* When recorder is disabled */
1425#define vTraceSetQueueName(object, name)
1426#define vTraceSetSemaphoreName(object, name)
1427#define vTraceSetMutexName(object, name)
1428#define vTraceSetEventGroupName(object, name)
1429#define vTraceSetStreamBufferName(object, name)
1430#define vTraceSetMessageBufferName(object, name)
1431
1432#endif
1433
1434#ifdef __cplusplus
1435}
1436#endif
1437
1438#endif /* TRC_KERNEL_PORT_H */
A structure representing the kernel port buffer.
Definition: trcKernelPort.h:73
Public trace heap APIs.