zephyr/doc/kernel/timing_functions/index.rst
Daniel Leung 6421c7a5fe os: timing: polish doxygen
() 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>
2023-12-12 19:10:33 +01:00

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