Quality RTOS & Embedded Software

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


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 ]    [ Privacy ]    [ Sitemap ]    [ ]

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

Latest News

FreeRTOS v10.2.1 is available for immediate download. MIT licensed, includes 64-bit RISC-V, NXP Cortex-M33 demo, Nuvoton Cortex-M23 demo & STM32H745 dual core (AMP) demo.

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


FreeRTOS and other embedded software careers at AWS.

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Cadence Tensilica Cortes

Espressif ESP32

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

Xilinx Microblaze and Zynq partner