内核定时
Zephyr提供了一个健壮的和可扩展的定时框架,以支持从任意精度的硬件定时源报告和跟踪定时事件。
时间单位
内核时间以多个用于不同目的的单元进行跟踪。
实时值通常以毫秒或微秒为单位指定,是应用程序代码时间的默认表示。它们具有普遍的便携性和可被广泛理解的优点,尽管它们可能与底层硬件的精度并不完全匹配。
内核通过k_cycle_get_32()
和k_cycle_get_64()
api呈现一个“循环”计数。其目的是,这个计数器表示操作系统能够向用户呈现的最快的周期计数器(例如,一个CPU周期计数器),并且读取操作非常快。期望是非常敏感的应用程序代码可能以轮询方式使用它,以实现最大的精度。这个计数器的频率需要随着时间的推移保持稳定,并且可以从sys_clock_hw_cycles_per_sec()
(几乎所有平台上都是一个运行时常数,计算结果为CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC
)。
对于异步计时,内核定义了一个“tick”的概念。“tick”是内核执行所有内部正常运行时间和超时记账的内部计数。预计将在实际范围内的"tick"边界上提供中断,并且不跟踪部分“tick”。点击率的选择可以通过CONFIG_SYS_CLOCK_TICKS_PER_SEC
进行配置。大多数硬件平台