esp-idf/examples/system/freertos/real_time_stats
He Yin Ling 6e05a79536 test: update example and unit tests with new import roles:
tiny_test_fw is a python package now. import it using normal way.
2019-12-11 15:57:49 +11:00
..
main examples: use new component registration api 2019-06-21 19:53:29 +08:00
CMakeLists.txt freertos: Add real time stats example 2019-02-26 14:34:53 +08:00
example_test.py test: update example and unit tests with new import roles: 2019-12-11 15:57:49 +11:00
Makefile freertos: Add real time stats example 2019-02-26 14:34:53 +08:00
README.md examples: change default build instructions in docs to CMake 2019-08-06 17:25:25 +05:30
sdkconfig.defaults freertos: Add real time stats example 2019-02-26 14:34:53 +08:00

FreeRTOS Real Time Stats Example

(See the README.md file in the upper level 'examples' directory for more information about examples.)

FreeRTOS provides the function vTaskGetRunTimeStats() to obtain CPU usage statistics of tasks. However, these statistics are with respect to the entire runtime of FreeRTOS (i.e. run time stats). Furthermore, statistics of vTaskGetRunTimeStats() are only valid whilst the timer for run time statistics has not overflowed.

This example demonstrates how to get CPU usage statistics of tasks with respect to a specified duration (i.e. real time stats) rather than over the entire runtime of FreeRTOS. The print_real_time_stats() function of this example demonstrates how this can be achieved.

How to use example

Hardware Required

This example should be able to run on any commonly available ESP32 development board.

Configure the project

idf.py menuconfig
  • Set serial port under Serial Flasher Options.

  • Enable FreeRTOS to collect run time stats under Component Config->FreeRTOS

  • The clock source of reference timer used for FreeRTOS statistics can be configured under Component Config->FreeRTOS

Build and Flash

Build the project and flash it to the board, then run monitor tool to view serial output:

idf.py -p PORT flash monitor

(To exit the serial monitor, type Ctrl-].)

See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.

Example Output

Getting real time stats over 100 ticks
| Task | Run Time | Percentage
| stats | 1304 | 0%
| IDLE0 | 206251 | 10%
| IDLE1 | 464785 | 23%
| spin2 | 225389 | 11%
| spin0 | 227174 | 11%
| spin4 | 225303 | 11%
| spin1 | 207264 | 10%
| spin3 | 225331 | 11%
| spin5 | 225369 | 11%
| Tmr Svc | 0 | 0%
| esp_timer | 0 | 0%
| ipc1 | 0 | 0%
| ipc0 | 0 | 0%
Real time stats obtained
  • When compiled in dual core mode, the percentage is with respect to the combined run time of both CPUs. Thus, 50% would indicate full utilization of a single CPU.
  • In single core mode, the percentage is with respect to a single CPU. Thus, 100% would indicate full utilization of the CPU.

The unit of Run Time is the period of the timer clock source used for FreeRTOS statistics.

Troubleshooting

Getting real time stats over 100 ticks
Error getting real time stats

If the above is output when running the example, users should check the return value of print_real_time_stats() to determine the reason for failure.