FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [August 2016 Threads]
I'm running FreeRTOS v 7.3.0 and am having trouble getting vTaskGetRunTimeStats() to compile in my code.
In FreeRTOSConfig.h I added the following line at the top of the file;
extern volatile unsigned long ulHighFrequencyTimerTicks;
This is how my code looks like for enabling run time stats in the file, in code it is just # and not (#), for some reason when I just do # as the first character on the line it turns the text into huge header text.
/* Run time stats gathering definitions. */
(#)if defined (GNUC) || defined (ICCARM)
void configuretimerforruntimestats( void );
uint32t getruntimecountervalue( void );
(#)define configGENERATERUNTIMESTATS 1
(#)define portCONFIGURETIMERFORRUNTIMESTATS() ( ulHighFrequencyTimerTicks = 0UL )
(#)define portGETRUNTIMECOUNTERVALUE() ulHighFrequencyTimerTicks
(#)endif
These are the errors I get, they are all located in tasks.c:
undefined reference to `ulHighFrequencyTimerTicks' tasks.c 1098
Code at 1098:
pxCurrentTCB = NULL;
undefined reference to `ulHighFrequencyTimerTicks' tasks.c 1594
Code at 1594:
prvGenerateRunTimeStatsForTasksInList( pcWriteBuffer, ( xList * ) pxDelayedTaskList, ulTotalRunTime );
undefined reference to `ulHighFrequencyTimerTicks' tasks.c 1851
Code at 1851:
taskFIRSTCHECKFORSTACKOVERFLOW();
undefined reference to `ulHighFrequencyTimerTicks' tasks.c 2414
Code at 2414:
vPortFree( pxNewTCB );
I've made certain tasks.c includes FreeRTOS.h which includes FreeRTOSConfig.h where the variable is decalred. Is there something else I need to do to the variable in order for it to be used in tasks.c?
I can only see an extern declaration for ulHighFrequencyTimerTicks in the code you posted, you need also to declare the variable somewhere in a C file.
ulHighFrequencyTimerTicks is not provided with FreeRTOS, you have to provide it yourself. The example on the web shows the variable being incremented in a fast timer isr, which is ok if your app has a fast timer isr anyway, but if not its more efficient to have portCONFIGURETIMERFORRUNTIMESTATS() call a function that starts a free running timer, then have portGETRUNTIMECOUNTER_VALUE() just return the timer count value so you dont need a variable at all. I think the web has such an example too.
Ahhhh I see, I thought tasks.c would still have scope of the variable. If that's the case then would I be able to just use xTaskGetTickCount() instead of creating a new timer entirely?
See the description of the portCONFIGURETIMERFORRUNTIME_STATS()
macro on the following page:
http://www.freertos.org/rtos-run-time-stats.html
While you could use the tick count, the resolution would not be high
enough to give you accurate results because you could not measure tasks
that executed for a fraction of a tick period.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.