.. _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 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