From 7fd1d847fb9f241a5193a599b65e941ed08611ca Mon Sep 17 00:00:00 2001 From: Richard Barry Date: Thu, 23 Dec 2010 10:40:13 +0000 Subject: [PATCH] Modify vTaskGetRunTimeStats() to ensure the current run time total is obtained from within a critical section. This allows greater flexibility in how the run time counter value is maintained. --- Source/tasks.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/tasks.c b/Source/tasks.c index 3274cbcc7..7fa375d0f 100644 --- a/Source/tasks.c +++ b/Source/tasks.c @@ -1282,8 +1282,17 @@ unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) void vTaskGetRunTimeStats( signed char *pcWriteBuffer ) { unsigned portBASE_TYPE uxQueue; - unsigned long ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); + unsigned long ulTotalRunTime; + /* A critical section is used because portGET_RUN_TIME_COUNTER_VALUE() + is implemented differently on different ports, so its not known if a + critical section is needed or not. */ + taskENTER_CRITICAL(); + { + ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); + } + taskEXIT_CRITICAL(); + /* This is a VERY costly function that should be used for debug only. It leaves interrupts disabled for a LONG time. */