84 lines
2.0 KiB
ReStructuredText
84 lines
2.0 KiB
ReStructuredText
.. _timing_functions:
|
|
|
|
Executing Time Functions
|
|
########################
|
|
|
|
The timing functions can be used to obtain execution time of
|
|
a section of code to aid in analysis and optimization.
|
|
|
|
Please note that the timing functions may use a different timer
|
|
than the default kernel timer, where the timer being used is
|
|
specified by architecture, SoC or board configuration.
|
|
|
|
Configuration
|
|
*************
|
|
|
|
To allow using the timing functions, :kconfig:option:`CONFIG_TIMING_FUNCTIONS`
|
|
needs to be enabled.
|
|
|
|
Usage
|
|
*****
|
|
|
|
To gather timing information:
|
|
|
|
1. Call :c:func:`timing_init` to initialize the timer.
|
|
|
|
2. Call :c:func:`timing_start` to signal the start of gathering of
|
|
timing information. This usually starts the timer.
|
|
|
|
3. Call :c:func:`timing_counter_get` to mark the start of code
|
|
execution.
|
|
|
|
4. Call :c:func:`timing_counter_get` to mark the end of code
|
|
execution.
|
|
|
|
5. Call :c:func:`timing_cycles_get` to get the number of timer cycles
|
|
between start and end of code execution.
|
|
|
|
6. Call :c:func:`timing_cycles_to_ns` with total number of cycles
|
|
to convert number of cycles to nanoseconds.
|
|
|
|
7. Repeat from step 3 to gather timing information for other
|
|
blocks of code.
|
|
|
|
8. Call :c:func:`timing_stop` to signal the end of gathering of
|
|
timing information. This usually stops the timer.
|
|
|
|
Example
|
|
-------
|
|
|
|
This shows an example on how to use the timing functions:
|
|
|
|
.. code-block:: c
|
|
|
|
#include <zephyr/timing/timing.h>
|
|
|
|
void gather_timing(void)
|
|
{
|
|
timing_t start_time, end_time;
|
|
uint64_t total_cycles;
|
|
uint64_t total_ns;
|
|
|
|
timing_init();
|
|
timing_start();
|
|
|
|
start_time = timing_counter_get();
|
|
|
|
code_execution_to_be_measured();
|
|
|
|
end_time = timing_counter_get();
|
|
|
|
total_cycles = timing_cycles_get(&start_time, &end_time);
|
|
total_ns = timing_cycles_to_ns(total_cycles);
|
|
|
|
timing_stop();
|
|
}
|
|
|
|
API documentation
|
|
*****************
|
|
|
|
.. doxygengroup:: timing_api
|
|
.. doxygengroup:: timing_api_arch
|
|
.. doxygengroup:: timing_api_soc
|
|
.. doxygengroup:: timing_api_board
|