Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT




Loading

vTaskGetRunTimeStats Errors

Posted by gstenos on August 5, 2016

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?


vTaskGetRunTimeStats Errors

Posted by edwards3 on August 5, 2016

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.


vTaskGetRunTimeStats Errors

Posted by gstenos on August 5, 2016

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?


vTaskGetRunTimeStats Errors

Posted by rtel on August 6, 2016

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.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS