]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace/trcBase.c
Update FreeRTOS+Trace recorder code.
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-Trace / trcBase.c
index 67f34bc33bda6e3bc1794440f6dd92d77c5d8857..bfd6cb28c3eadb77083e5a89eaf30f8b553a8d5e 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************\r
- * Tracealyzer v2.4.1 Recorder Library\r
+ * Tracealyzer v2.5.0 Recorder Library\r
  * Percepio AB, www.percepio.com\r
  *\r
  * trcBase.c\r
@@ -54,6 +54,8 @@ uint8_t excludedEventCodes[NEventCodes / 8 + 1] = { 0 };
 /* Keeps track of available handles */\r
 objectHandleStackType objectHandleStacks = { { 0 }, { 0 }, { 0 }, { 0 }, { 0 } };\r
 \r
+uint32_t init_hwtc_count;\r
+\r
 /*******************************************************************************\r
  * RecorderData\r
  *\r
@@ -101,6 +103,8 @@ RecorderDataType* RecorderDataPtr = NULL;
 /* This version of the function dynamically allocates the trace data */\r
 void prvTraceInitTraceData()\r
 {\r
+       init_hwtc_count = HWTC_COUNT;\r
+       \r
 #if TRACE_DATA_ALLOCATION == TRACE_DATA_ALLOCATION_STATIC\r
        RecorderDataPtr = &RecorderData;\r
 #elif TRACE_DATA_ALLOCATION == TRACE_DATA_ALLOCATION_DYNAMIC\r
@@ -217,11 +221,9 @@ uint16_t uiIndexOfObject(objectHandleType objecthandle, uint8_t objectclass)
        TRACE_ASSERT(objectclass < TRACE_NCLASSES, "uiIndexOfObject: Invalid value for objectclass", 0);\r
        TRACE_ASSERT(objecthandle > 0 && objecthandle <= RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[objectclass], "uiIndexOfObject: Invalid value for objecthandle", 0);\r
 \r
-    if ((objectclass < TRACE_NCLASSES) && (objecthandle > 0) && (objecthandle <=\r
-    RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[objectclass]))\r
+    if ((objectclass < TRACE_NCLASSES) && (objecthandle > 0) && (objecthandle <= RecorderDataPtr->ObjectPropertyTable.NumberOfObjectsPerClass[objectclass]))\r
     {\r
-        return (uint16_t)(RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[objectclass] +\r
-                       (RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[objectclass] * (objecthandle-1)));\r
+        return (uint16_t)(RecorderDataPtr->ObjectPropertyTable.StartIndexOfClass[objectclass] + (RecorderDataPtr->ObjectPropertyTable.TotalPropertyBytesPerClass[objectclass] * (objecthandle-1)));\r
     }\r
 \r
     vTraceError("Object table lookup with invalid object handle or object class!");\r
@@ -554,23 +556,20 @@ uint16_t prvTraceGetDTS(uint16_t param_maxDTS)
 \r
     TRACE_ASSERT(param_maxDTS == 0xFF || param_maxDTS == 0xFFFF, "prvTraceGetDTS: Invalid value for param_maxDTS", 0);\r
 \r
-    if (RecorderDataPtr->frequency == 0)\r
+    if (RecorderDataPtr->frequency == 0 && init_hwtc_count != HWTC_COUNT)\r
     {\r
         /* If HWTC_PERIOD is mapped to the timer reload register,\r
         such as in the Cortex M port, it might not be initialized\r
                before the Kernel scheduler has been started has been\r
-               started. We therefore store the frequency of the timer at\r
-               the first timestamped event after the scheduler has started.\r
-               (Note that this function is called also by vTraceStart and\r
-               uiTraceStart, which might be called before the scheduler\r
-               has been started.) */\r
+               started. We therefore store the frequency of the timer\r
+               once the counter register has changed. */\r
 \r
 #if (SELECTED_PORT == PORT_Win32)\r
         RecorderDataPtr->frequency = 100000;\r
 #elif (SELECTED_PORT == PORT_HWIndependent)\r
         RecorderDataPtr->frequency = TRACE_TICK_RATE_HZ;\r
 #else\r
-               RecorderDataPtr->frequency = TRACE_CPU_CLOCK_HZ / (uint32_t)HWTC_DIVISOR;\r
+               RecorderDataPtr->frequency = (HWTC_PERIOD * TRACE_TICK_RATE_HZ) / (uint32_t)HWTC_DIVISOR;\r
 #endif\r
     }\r
 \r