() Moves the architecture specific timing measurement APIs under the timing measurement APIs group. () Add SoC and board specific API groups. () Document each SoC and board specific API so the doc shows up for them. Signed-off-by: Daniel Leung <daniel.leung@intel.com>
83 lines
2 KiB
ReStructuredText
83 lines
2 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
|