/*******************************************************************************\r
- * Tracealyzer v2.4.1 Recorder Library\r
+ * Tracealyzer v2.7.7 Recorder Library\r
* Percepio AB, www.percepio.com\r
*\r
* trcKernelPort.c\r
* damages, or the exclusion of implied warranties or limitations on how long an \r
* implied warranty may last, so the above limitations may not apply to you.\r
*\r
- * Copyright Percepio AB, 2013.\r
+ * Tabs are used for indent in this file (1 tab = 4 spaces)\r
+ *\r
+ * Copyright Percepio AB, 2012-2015.\r
* www.percepio.com\r
******************************************************************************/\r
\r
\r
#include "task.h"\r
\r
+/* For classes implemented as FreeRTOS Queues: \r
+This translates queue.type to the corresponding trace object class. */\r
traceObjectClass TraceObjectClassTable[5] = {\r
TRACE_CLASS_QUEUE,\r
TRACE_CLASS_MUTEX,\r
TRACE_CLASS_MUTEX\r
};\r
\r
+int uiInEventGroupSetBitsFromISR = 0;\r
+\r
extern unsigned char ucQueueGetQueueType(void*);\r
-extern unsigned char ucQueueGetQueueNumber(void*);\r
+\r
+#if (FREERTOS_VERSION < FREERTOS_VERSION_8_0_OR_LATER)\r
+\r
+extern portBASE_TYPE ucQueueGetQueueNumber(void*);\r
\r
objectHandleType prvTraceGetObjectNumber(void* handle)\r
{\r
- return ucQueueGetQueueNumber(handle); \r
+ return (objectHandleType) ucQueueGetQueueNumber(handle);\r
}\r
\r
-unsigned char prvTraceGetObjectType(void* handle)\r
-{\r
- return ucQueueGetQueueType(handle);\r
-}\r
+#else\r
\r
-objectHandleType prvTraceGetTaskNumber(void* handle)\r
+extern portBASE_TYPE uxQueueGetQueueNumber(void*);\r
+\r
+objectHandleType prvTraceGetObjectNumber(void* handle)\r
{\r
- return (objectHandleType)uxTaskGetTaskNumber(handle);\r
+ return (objectHandleType) uxQueueGetQueueNumber(handle);\r
}\r
\r
-void prvTraceEnterCritical()\r
+#endif\r
+\r
+unsigned char prvTraceGetObjectType(void* handle)\r
{\r
- taskENTER_CRITICAL();\r
+ return ucQueueGetQueueType(handle);\r
}\r
\r
-void prvTraceExitCritical()\r
+objectHandleType prvTraceGetTaskNumber(void* handle)\r
{\r
- taskEXIT_CRITICAL();\r
+ return (objectHandleType)uxTaskGetTaskNumber(handle);\r
}\r
\r
unsigned char prvTraceIsSchedulerActive()\r
RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[2] = NMutex;\r
RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[3] = NTask;\r
RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[4] = NISR;\r
+ RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[5] = NTimer;\r
+ RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[6] = NEventGroup; \r
RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[0] = NameLenQueue;\r
RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[1] = NameLenSemaphore;\r
RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[2] = NameLenMutex;\r
RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[3] = NameLenTask;\r
RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[4] = NameLenISR;\r
+ RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[5] = NameLenTimer;\r
+ RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[6] = NameLenEventGroup; \r
RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[0] = PropertyTableSizeQueue;\r
RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[1] = PropertyTableSizeSemaphore;\r
RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[2] = PropertyTableSizeMutex;\r
RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[3] = PropertyTableSizeTask;\r
RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[4] = PropertyTableSizeISR;\r
+ RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[5] = PropertyTableSizeTimer;\r
+ RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[6] = PropertyTableSizeEventGroup;\r
RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[0] = StartIndexQueue;\r
RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[1] = StartIndexSemaphore;\r
RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[2] = StartIndexMutex;\r
RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[3] = StartIndexTask;\r
RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[4] = StartIndexISR;\r
+ RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[5] = StartIndexTimer;\r
+ RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[6] = StartIndexEventGroup;\r
RecorderDataPtr->ObjectPropertyTable.ObjectPropertyTableSizeInBytes = TRACE_OBJECT_TABLE_SIZE;\r
}\r
\r
/* Initialization of the handle mechanism, see e.g, xTraceGetObjectHandle */\r
void vTraceInitObjectHandleStack()\r
{\r
- objectHandleStacks.indexOfNextAvailableHandle[0] = 0;\r
- objectHandleStacks.indexOfNextAvailableHandle[1] = NQueue;\r
- objectHandleStacks.indexOfNextAvailableHandle[2] = NQueue + NSemaphore;\r
- objectHandleStacks.indexOfNextAvailableHandle[3] = NQueue + NSemaphore + NMutex;\r
- objectHandleStacks.indexOfNextAvailableHandle[4] = NQueue + NSemaphore + NMutex + NTask;\r
- objectHandleStacks.lowestIndexOfClass[0] = 0;\r
- objectHandleStacks.lowestIndexOfClass[1] = NQueue;\r
- objectHandleStacks.lowestIndexOfClass[2] = NQueue + NSemaphore;\r
- objectHandleStacks.lowestIndexOfClass[3] = NQueue + NSemaphore + NMutex;\r
- objectHandleStacks.lowestIndexOfClass[4] = NQueue + NSemaphore + NMutex + NTask;\r
- objectHandleStacks.highestIndexOfClass[0] = NQueue - 1;\r
+ objectHandleStacks.indexOfNextAvailableHandle[0] = objectHandleStacks.lowestIndexOfClass[0] = 0;\r
+ objectHandleStacks.indexOfNextAvailableHandle[1] = objectHandleStacks.lowestIndexOfClass[1] = NQueue;\r
+ objectHandleStacks.indexOfNextAvailableHandle[2] = objectHandleStacks.lowestIndexOfClass[2] = NQueue + NSemaphore;\r
+ objectHandleStacks.indexOfNextAvailableHandle[3] = objectHandleStacks.lowestIndexOfClass[3] = NQueue + NSemaphore + NMutex;\r
+ objectHandleStacks.indexOfNextAvailableHandle[4] = objectHandleStacks.lowestIndexOfClass[4] = NQueue + NSemaphore + NMutex + NTask;\r
+ objectHandleStacks.indexOfNextAvailableHandle[5] = objectHandleStacks.lowestIndexOfClass[5] = NQueue + NSemaphore + NMutex + NTask + NISR;\r
+ objectHandleStacks.indexOfNextAvailableHandle[6] = objectHandleStacks.lowestIndexOfClass[6] = NQueue + NSemaphore + NMutex + NTask + NISR + NTimer;\r
+\r
+ objectHandleStacks.highestIndexOfClass[0] = NQueue - 1;\r
objectHandleStacks.highestIndexOfClass[1] = NQueue + NSemaphore - 1;\r
objectHandleStacks.highestIndexOfClass[2] = NQueue + NSemaphore + NMutex - 1;\r
objectHandleStacks.highestIndexOfClass[3] = NQueue + NSemaphore + NMutex + NTask - 1;\r
objectHandleStacks.highestIndexOfClass[4] = NQueue + NSemaphore + NMutex + NTask + NISR - 1;\r
+ objectHandleStacks.highestIndexOfClass[5] = NQueue + NSemaphore + NMutex + NTask + NISR + NTimer - 1;\r
+ objectHandleStacks.highestIndexOfClass[6] = NQueue + NSemaphore + NMutex + NTask + NISR + NTimer + NEventGroup - 1;\r
}\r
\r
/* Returns the "Not enough handles" error message for this object class */\r
return "Not enough MUTEX handles - increase NMutex in trcConfig.h";\r
case TRACE_CLASS_QUEUE:\r
return "Not enough QUEUE handles - increase NQueue in trcConfig.h";\r
+ case TRACE_CLASS_TIMER:\r
+ return "Not enough TIMER handles - increase NTimer in trcConfig.h";\r
+ case TRACE_CLASS_EVENTGROUP:\r
+ return "Not enough EVENTGROUP handles - increase NEventGroup in trcConfig.h"; \r
default:\r
return "pszTraceGetErrorHandles: Invalid objectclass!";\r
}\r
return TRACE_GET_MUTEX_FLAG_ISEXCLUDED(handle);\r
case TRACE_CLASS_QUEUE:\r
return TRACE_GET_QUEUE_FLAG_ISEXCLUDED(handle);\r
+ case TRACE_CLASS_TIMER:\r
+ return TRACE_GET_TIMER_FLAG_ISEXCLUDED(handle); \r
+ case TRACE_CLASS_EVENTGROUP:\r
+ return TRACE_GET_EVENTGROUP_FLAG_ISEXCLUDED(handle); \r
}\r
\r
+ vTraceError("Invalid object class ID in uiTraceIsObjectExcluded!");\r
+ \r
/* Must never reach */\r
return 1;\r
}\r