Go to the documentation of this file. 47 #ifndef TRCKERNELHOOKS_H 48 #define TRCKERNELHOOKS_H 50 #if (USE_TRACEALYZER_RECORDER == 1) 52 #undef INCLUDE_xTaskGetSchedulerState 53 #define INCLUDE_xTaskGetSchedulerState 1 55 #undef INCLUDE_xTaskGetCurrentTaskHandle 56 #define INCLUDE_xTaskGetCurrentTaskHandle 1 58 #ifndef INCLUDE_OBJECT_DELETE 59 #define INCLUDE_OBJECT_DELETE 0 62 #ifndef INCLUDE_READY_EVENTS 63 #define INCLUDE_READY_EVENTS 1 66 #ifndef INCLUDE_NEW_TIME_EVENTS 67 #define INCLUDE_NEW_TIME_EVENTS 0 70 #if (INCLUDE_OBJECT_DELETE == 1) 72 #undef trcKERNEL_HOOKS_TASK_DELETE 73 #define trcKERNEL_HOOKS_TASK_DELETE(SERVICE, pxTCB) \ 74 vTraceStoreKernelCall(TRACE_GET_TASK_EVENT_CODE(SERVICE, SUCCESS, CLASS, pxTCB), TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); \ 75 vTraceStoreObjectNameOnCloseEvent(TRACE_GET_TASK_NUMBER(pxTCB), TRACE_CLASS_TASK); \ 76 vTraceStoreObjectPropertiesOnCloseEvent(TRACE_GET_TASK_NUMBER(pxTCB), TRACE_CLASS_TASK); \ 77 vTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_PRIORITY(pxTCB)); \ 78 vTraceSetObjectState(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TASK_STATE_INSTANCE_NOT_ACTIVE); \ 79 vTraceFreeObjectHandle(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); 81 #undef trcKERNEL_HOOKS_TASK_DELETE 82 #define trcKERNEL_HOOKS_TASK_DELETE(SERVICE, pxTCB) 85 #if (INCLUDE_OBJECT_DELETE == 1) 87 #undef trcKERNEL_HOOKS_OBJECT_DELETE 88 #define trcKERNEL_HOOKS_OBJECT_DELETE(SERVICE, CLASS, pxObject) \ 89 vTraceStoreKernelCall(TRACE_GET_OBJECT_EVENT_CODE(SERVICE, SUCCESS, CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); \ 90 vTraceStoreObjectNameOnCloseEvent(TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject)); \ 91 vTraceStoreObjectPropertiesOnCloseEvent(TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject)); \ 92 vTraceFreeObjectHandle(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); 94 #undef trcKERNEL_HOOKS_OBJECT_DELETE 95 #define trcKERNEL_HOOKS_OBJECT_DELETE(SERVICE, CLASS, pxObject) 99 #undef trcKERNEL_HOOKS_TASK_CREATE 100 #define trcKERNEL_HOOKS_TASK_CREATE(SERVICE, CLASS, pxTCB) \ 101 TRACE_SET_TASK_NUMBER(pxTCB) \ 102 vTraceSetObjectName(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_NAME(pxTCB)); \ 103 vTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_PRIORITY(pxTCB)); \ 104 vTraceStoreKernelCall(TRACE_GET_TASK_EVENT_CODE(SERVICE, SUCCESS, CLASS, pxTCB), TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); 107 #undef trcKERNEL_HOOKS_TASK_CREATE_FAILED 108 #define trcKERNEL_HOOKS_TASK_CREATE_FAILED(SERVICE, CLASS) \ 109 vTraceStoreKernelCall(TRACE_GET_TASK_EVENT_CODE(SERVICE, FAILED, CLASS, 0), TRACE_CLASS_TASK, 0); 112 #undef trcKERNEL_HOOKS_OBJECT_CREATE 113 #define trcKERNEL_HOOKS_OBJECT_CREATE(SERVICE, CLASS, pxObject)\ 114 TRACE_SET_OBJECT_NUMBER(CLASS, pxObject);\ 115 vTraceStoreKernelCall(TRACE_GET_OBJECT_EVENT_CODE(SERVICE, SUCCESS, CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); \ 116 vTraceSetObjectState(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), 0); 119 #undef trcKERNEL_HOOKS_OBJECT_CREATE_FAILED 120 #define trcKERNEL_HOOKS_OBJECT_CREATE_FAILED(SERVICE, CLASS, kernelClass) \ 121 vTraceStoreKernelCall(TRACE_GET_CLASS_EVENT_CODE(SERVICE, FAILED, CLASS, kernelClass), TRACE_GET_CLASS_TRACE_CLASS(CLASS, kernelClass), 0); 124 #undef trcKERNEL_HOOKS_KERNEL_SERVICE 125 #define trcKERNEL_HOOKS_KERNEL_SERVICE(SERVICE, RESULT, CLASS, pxObject) \ 126 vTraceStoreKernelCall(TRACE_GET_OBJECT_EVENT_CODE(SERVICE, RESULT, CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); 129 #undef trcKERNEL_HOOKS_SET_OBJECT_STATE 130 #define trcKERNEL_HOOKS_SET_OBJECT_STATE(CLASS, pxObject, STATE) \ 131 vTraceSetObjectState(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), STATE); 134 #undef trcKERNEL_HOOKS_SET_TASK_INSTANCE_FINISHED 135 #define trcKERNEL_HOOKS_SET_TASK_INSTANCE_FINISHED() \ 136 vTraceSetTaskInstanceFinished(TRACE_GET_TASK_NUMBER(TRACE_GET_CURRENT_TASK())); 138 #if INCLUDE_READY_EVENTS == 1 140 #undef trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE 141 #define trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE(pxTCB) \ 142 vTraceStoreTaskReady(TRACE_GET_TASK_NUMBER(pxTCB)); 144 #undef trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE 145 #define trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE(pxTCB) 149 #undef trcKERNEL_HOOKS_INCREMENT_TICK 150 #define trcKERNEL_HOOKS_INCREMENT_TICK() \ 151 { extern uint32_t uiTraceTickCount; uiTraceTickCount++; vTracePortGetTimeStamp(0); } 153 #if INCLUDE_NEW_TIME_EVENTS == 1 155 #undef trcKERNEL_HOOKS_NEW_TIME 156 #define trcKERNEL_HOOKS_NEW_TIME(SERVICE, xValue) \ 157 vTraceStoreKernelCallWithNumericParamOnly(SERVICE, xValue); 159 #undef trcKERNEL_HOOKS_NEW_TIME 160 #define trcKERNEL_HOOKS_NEW_TIME(SERVICE, xValue) 164 #undef trcKERNEL_HOOKS_TASK_SWITCH 165 #define trcKERNEL_HOOKS_TASK_SWITCH( pxTCB ) \ 166 vTraceStoreTaskswitch(TRACE_GET_TASK_NUMBER(pxTCB)); 169 #undef trcKERNEL_HOOKS_TASK_SUSPEND 170 #define trcKERNEL_HOOKS_TASK_SUSPEND(SERVICE, pxTCB) \ 171 vTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); \ 172 vTraceSetTaskInstanceFinished((uint8_t)TRACE_GET_TASK_NUMBER(pxTCB)); 175 #undef trcKERNEL_HOOKS_TASK_DELAY 176 #define trcKERNEL_HOOKS_TASK_DELAY(SERVICE, pxTCB, xValue) \ 177 vTraceStoreKernelCallWithNumericParamOnly(SERVICE, xValue); \ 178 vTraceSetTaskInstanceFinished((uint8_t)TRACE_GET_TASK_NUMBER(pxTCB)); 181 #undef trcKERNEL_HOOKS_TASK_PRIORITY_CHANGE 182 #define trcKERNEL_HOOKS_TASK_PRIORITY_CHANGE(SERVICE, pxTCB, uxNewPriority) \ 183 vTraceStoreKernelCallWithParam(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), uiTraceGetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)));\ 184 vTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), (uint8_t)uxNewPriority); 187 #undef trcKERNEL_HOOKS_TASK_RESUME 188 #define trcKERNEL_HOOKS_TASK_RESUME(SERVICE, pxTCB) \ 189 vTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); 191 #undef trcKERNEL_HOOKS_TIMER_EVENT 192 #define trcKERNEL_HOOKS_TIMER_EVENT(SERVICE, pxTimer) \ 193 vTraceStoreKernelCall(SERVICE, TRACE_CLASS_TIMER, TRACE_GET_TIMER_NUMBER(pxTimer)); 196 #undef trcKERNEL_HOOKS_TIMER_CREATE 197 #define trcKERNEL_HOOKS_TIMER_CREATE(SERVICE, pxTimer) \ 198 TRACE_SET_TIMER_NUMBER(pxTimer); \ 199 vTraceSetObjectName(TRACE_CLASS_TIMER, TRACE_GET_TIMER_NUMBER(pxTimer), TRACE_GET_TIMER_NAME(pxTimer)); \ 200 vTraceStoreKernelCall(SERVICE, TRACE_CLASS_TIMER, TRACE_GET_TIMER_NUMBER(pxTimer)); 203 #undef trcKERNEL_HOOKS_TIMER_DELETE 204 #define trcKERNEL_HOOKS_TIMER_DELETE(SERVICE, pxTimer) \ 205 vTraceStoreKernelCall(SERVICE, TRACE_CLASS_TIMER, TRACE_GET_TIMER_NUMBER(pxTimer)); \ 206 vTraceStoreObjectNameOnCloseEvent(TRACE_GET_TIMER_NUMBER(pxTimer), TRACE_CLASS_TIMER); \ 207 vTraceStoreObjectPropertiesOnCloseEvent(TRACE_GET_TIMER_NUMBER(pxTimer), TRACE_CLASS_TIMER); \ 208 vTraceFreeObjectHandle(TRACE_CLASS_TIMER, TRACE_GET_TIMER_NUMBER(pxTimer));