kernel: Deprecate sys_clock_us_per_tick variable.
On some architectures tick time cannot be expressed as integer number of microseconds, introducing error in calculations using sys_clock_us_per_tick variable. This commit deprecates the sys_clock_us_per_tick variable and replaces its usage by more precise calculations based on sys_clock_hw_cycles_per_sec and sys_clock_ticks_per_sec. Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
This commit is contained in:
parent
408a580644
commit
2fe998cdef
7 changed files with 14 additions and 14 deletions
|
@ -580,11 +580,10 @@ int _sys_clock_driver_init(struct device *device)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert the 'sys_clock_us_per_tick' value
|
* Get tick time (in femptoseconds).
|
||||||
* from microseconds to femptoseconds
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
tickFempto = (u64_t)sys_clock_us_per_tick * 1000000000;
|
tickFempto = 1000000000000000ull / sys_clock_ticks_per_sec;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This driver shall read the COUNTER_CLK_PERIOD value from the general
|
* This driver shall read the COUNTER_CLK_PERIOD value from the general
|
||||||
|
|
|
@ -103,7 +103,7 @@ int _sys_clock_driver_init(struct device *device)
|
||||||
{
|
{
|
||||||
ARG_UNUSED(device);
|
ARG_UNUSED(device);
|
||||||
|
|
||||||
tick_period = sys_clock_us_per_tick;
|
tick_period = 1000000ul / sys_clock_ticks_per_sec;
|
||||||
|
|
||||||
hwtimer_enable(tick_period);
|
hwtimer_enable(tick_period);
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _ASMLANGUAGE
|
#ifndef _ASMLANGUAGE
|
||||||
|
#include <toolchain.h>
|
||||||
#include <zephyr/types.h>
|
#include <zephyr/types.h>
|
||||||
|
|
||||||
#if defined(CONFIG_SYS_CLOCK_EXISTS) && \
|
#if defined(CONFIG_SYS_CLOCK_EXISTS) && \
|
||||||
|
@ -46,8 +47,10 @@ extern int sys_clock_hw_cycles_per_sec;
|
||||||
/*
|
/*
|
||||||
* sys_clock_us_per_tick global variable represents a number
|
* sys_clock_us_per_tick global variable represents a number
|
||||||
* of microseconds in one OS timer tick
|
* of microseconds in one OS timer tick
|
||||||
|
*
|
||||||
|
* Note: This variable is deprecated and will be removed soon!
|
||||||
*/
|
*/
|
||||||
extern int sys_clock_us_per_tick;
|
__deprecated extern int sys_clock_us_per_tick;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sys_clock_hw_cycles_per_tick global variable represents a number
|
* sys_clock_hw_cycles_per_tick global variable represents a number
|
||||||
|
@ -75,8 +78,7 @@ extern int sys_clock_hw_cycles_per_tick;
|
||||||
|
|
||||||
/* SYS_CLOCK_HW_CYCLES_TO_NS64 converts CPU clock cycles to nanoseconds */
|
/* SYS_CLOCK_HW_CYCLES_TO_NS64 converts CPU clock cycles to nanoseconds */
|
||||||
#define SYS_CLOCK_HW_CYCLES_TO_NS64(X) \
|
#define SYS_CLOCK_HW_CYCLES_TO_NS64(X) \
|
||||||
(((u64_t)(X) * sys_clock_us_per_tick * NSEC_PER_USEC) / \
|
(((u64_t)(X) * NSEC_PER_SEC) / sys_clock_hw_cycles_per_sec)
|
||||||
sys_clock_hw_cycles_per_tick)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SYS_CLOCK_HW_CYCLES_TO_NS_AVG converts CPU clock cycles to nanoseconds
|
* SYS_CLOCK_HW_CYCLES_TO_NS_AVG converts CPU clock cycles to nanoseconds
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
|
|
||||||
#define HW_CYCLES_TO_USEC(__hw_cycle__) \
|
#define HW_CYCLES_TO_USEC(__hw_cycle__) \
|
||||||
( \
|
( \
|
||||||
((u64_t)(__hw_cycle__) * (u64_t)sys_clock_us_per_tick) / \
|
((u64_t)(__hw_cycle__) * (u64_t)USEC_PER_SEC) / \
|
||||||
((u64_t)sys_clock_hw_cycles_per_tick) \
|
((u64_t)sys_clock_hw_cycles_per_sec) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define HW_CYCLES_TO_SEC(__hw_cycle__) \
|
#define HW_CYCLES_TO_SEC(__hw_cycle__) \
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
|
|
||||||
#define USEC_TO_HW_CYCLES(__usec__) \
|
#define USEC_TO_HW_CYCLES(__usec__) \
|
||||||
( \
|
( \
|
||||||
((u64_t)(__usec__) * (u64_t)sys_clock_hw_cycles_per_tick) / \
|
((u64_t)(__usec__) * (u64_t)sys_clock_hw_cycles_per_sec) / \
|
||||||
((u64_t)sys_clock_us_per_tick) \
|
((u64_t)USEC_PER_SEC) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define SEC_TO_HW_CYCLES(__sec__) \
|
#define SEC_TO_HW_CYCLES(__sec__) \
|
||||||
|
|
|
@ -245,7 +245,7 @@ static void _test_kernel_cpu_idle(int atomic)
|
||||||
k_cpu_idle();
|
k_cpu_idle();
|
||||||
}
|
}
|
||||||
/* calculating milliseconds per tick*/
|
/* calculating milliseconds per tick*/
|
||||||
tms += sys_clock_us_per_tick / USEC_PER_MSEC;
|
tms += __ticks_to_ms(1);
|
||||||
tms2 = k_uptime_get_32();
|
tms2 = k_uptime_get_32();
|
||||||
zassert_false(tms2 < tms, "Bad ms per tick value computed,"
|
zassert_false(tms2 < tms, "Bad ms per tick value computed,"
|
||||||
"got %d which is less than %d\n",
|
"got %d which is less than %d\n",
|
||||||
|
|
|
@ -16,7 +16,7 @@ static struct k_thread tdata[NUM_THREAD];
|
||||||
#define CONFIG_TICKLESS_IDLE_THRESH 20
|
#define CONFIG_TICKLESS_IDLE_THRESH 20
|
||||||
#endif
|
#endif
|
||||||
/*millisecond per tick*/
|
/*millisecond per tick*/
|
||||||
#define MSEC_PER_TICK (sys_clock_us_per_tick / USEC_PER_MSEC)
|
#define MSEC_PER_TICK (__ticks_to_ms(1))
|
||||||
/*sleep duration tickless*/
|
/*sleep duration tickless*/
|
||||||
#define SLEEP_TICKLESS (CONFIG_TICKLESS_IDLE_THRESH * MSEC_PER_TICK)
|
#define SLEEP_TICKLESS (CONFIG_TICKLESS_IDLE_THRESH * MSEC_PER_TICK)
|
||||||
/*sleep duration with tick*/
|
/*sleep duration with tick*/
|
||||||
|
|
|
@ -54,7 +54,6 @@ void test_timer(void)
|
||||||
|
|
||||||
errors = 0;
|
errors = 0;
|
||||||
|
|
||||||
TC_PRINT("sys_clock_us_per_tick = %d\n", sys_clock_us_per_tick);
|
|
||||||
TC_PRINT("sys_clock_hw_cycles_per_tick = %d\n",
|
TC_PRINT("sys_clock_hw_cycles_per_tick = %d\n",
|
||||||
sys_clock_hw_cycles_per_tick);
|
sys_clock_hw_cycles_per_tick);
|
||||||
TC_PRINT("sys_clock_hw_cycles_per_sec = %d\n",
|
TC_PRINT("sys_clock_hw_cycles_per_sec = %d\n",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue