mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-26 16:26:02 +00:00
Several issues: - `last_count` should not be updated with current time or this will cause a time drift and induce jitter due to IRQ servicing latency. - `sys_clock_set_timeout()` should not base its `mtime` on the current time either. Tracking the `last_tick` and `last_elapsed` values avoids the need for all the tick rounding computation. - The MIN_DELAY thing is pointless. If the delay gets close or even behind current time then the IRQ will be triggered right away. This is unlikely to happen very often anyway so the constant overhead is uncalled for. - Runtime 64-bits divisions on 32-bits hardware are very expensive. Fix the above, and improve the following: - Prime the accounting by simply invoking the IRQ handler from the init code. That will make the "ticks since boot" counter right. - Remove excessive casts, especially a few wrong ones. - Simplify the code overall. Here's the output from the timer_jitter_drift test. Before this patch: |timer clock rate 60000000, kernel tick rate 10000 |period duration statistics for 10000 samples (0 rollovers): | expected: 1000 us, 60000.000000 cycles | min: 907.600000 us, 54456 cycles | max: 1099.750000 us, 65985 cycles | mean: 1008.594633 us, 60515.678000 cycles | variance: 2.184205 us, 7863.136316 cycles | stddev: 1.477906 us, 88.674332 cycles |timer start cycle 995589, end cycle 606152369, |total time 10085946.333333 us, expected time 10000000.000000 us, |expected time drift 0.000000 us, difference 85946.333333 us After this patch: |timer clock rate 60000000, kernel tick rate 10000 |period duration statistics for 10000 samples (0 rollovers): | expected: 1000 us, 60000.000000 cycles | min: 992.116667 us, 59527 cycles | max: 1030.366667 us, 61822 cycles | mean: 1000.001902 us, 60000.114100 cycles | variance: 0.105334 us, 379.201081 cycles | stddev: 0.324551 us, 19.473087 cycles |timer start cycle 987431, end cycle 600988572, |total time 10000019.016667 us, expected time 10000000.000000 us, |expected time drift 0.000000 us, difference 19.016667 us The mean, variance and standard deviation number differences speak for themselves, even in the absence of competing ISRs and/or IRQ-disabled periods which would have made the comparison even worse. Signed-off-by: Nicolas Pitre <npitre@baylibre.com> |
||
---|---|---|
.github | ||
arch | ||
boards | ||
cmake | ||
doc | ||
drivers | ||
dts | ||
include/zephyr | ||
kernel | ||
lib | ||
misc | ||
modules | ||
samples | ||
scripts | ||
share | ||
soc | ||
submanifests | ||
subsys | ||
tests | ||
.checkpatch.conf | ||
.clang-format | ||
.codecov.yml | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitlint | ||
.mailmap | ||
.yamllint | ||
CMakeLists.txt | ||
CODE_OF_CONDUCT.md | ||
CODEOWNERS | ||
CONTRIBUTING.rst | ||
Kconfig | ||
Kconfig.zephyr | ||
LICENSE | ||
MAINTAINERS.yml | ||
README.rst | ||
VERSION | ||
version.h.in | ||
west.yml | ||
zephyr-env.cmd | ||
zephyr-env.sh |
.. raw:: html <a href="https://www.zephyrproject.org"> <p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="doc/_static/images/logo-readme-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="doc/_static/images/logo-readme-light.svg"> <img src="doc/_static/images/logo-readme-light.svg"> </picture> </p> </a> <a href="https://bestpractices.coreinfrastructure.org/projects/74"><img src="https://bestpractices.coreinfrastructure.org/projects/74/badge"></a> <a href="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml?query=branch%3Amain"> <img src="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml/badge.svg?event=push"></a> The Zephyr Project is a scalable real-time operating system (RTOS) supporting multiple hardware architectures, optimized for resource constrained devices, and built with security in mind. The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained systems: from simple embedded environmental sensors and LED wearables to sophisticated smart watches and IoT wireless gateways. The Zephyr kernel supports multiple architectures, including ARM (Cortex-A, Cortex-R, Cortex-M), Intel x86, ARC, Nios II, Tensilica Xtensa, and RISC-V, SPARC, MIPS, and a large number of `supported boards`_. .. below included in doc/introduction/introduction.rst Getting Started *************** Welcome to Zephyr! See the `Introduction to Zephyr`_ for a high-level overview, and the documentation's `Getting Started Guide`_ to start developing. .. start_include_here Community Support ***************** Community support is provided via mailing lists and Discord; see the Resources below for details. .. _project-resources: Resources ********* Here's a quick summary of resources to help you find your way around: * **Help**: `Asking for Help Tips`_ * **Documentation**: http://docs.zephyrproject.org (`Getting Started Guide`_) * **Source Code**: https://github.com/zephyrproject-rtos/zephyr is the main repository; https://elixir.bootlin.com/zephyr/latest/source contains a searchable index * **Releases**: https://github.com/zephyrproject-rtos/zephyr/releases * **Samples and example code**: see `Sample and Demo Code Examples`_ * **Mailing Lists**: users@lists.zephyrproject.org and devel@lists.zephyrproject.org are the main user and developer mailing lists, respectively. You can join the developer's list and search its archives at `Zephyr Development mailing list`_. The other `Zephyr mailing list subgroups`_ have their own archives and sign-up pages. * **Nightly CI Build Status**: https://lists.zephyrproject.org/g/builds The builds@lists.zephyrproject.org mailing list archives the CI nightly build results. * **Chat**: Real-time chat happens in Zephyr's Discord Server. Use this `Discord Invite`_ to register. * **Contributing**: see the `Contribution Guide`_ * **Wiki**: `Zephyr GitHub wiki`_ * **Issues**: https://github.com/zephyrproject-rtos/zephyr/issues * **Security Issues**: Email vulnerabilities@zephyrproject.org to report security issues; also see our `Security`_ documentation. Security issues are tracked separately at https://zephyrprojectsec.atlassian.net. * **Zephyr Project Website**: https://zephyrproject.org .. _Discord Invite: https://chat.zephyrproject.org .. _supported boards: http://docs.zephyrproject.org/latest/boards/index.html .. _Zephyr Documentation: http://docs.zephyrproject.org .. _Introduction to Zephyr: http://docs.zephyrproject.org/latest/introduction/index.html .. _Getting Started Guide: http://docs.zephyrproject.org/latest/develop/getting_started/index.html .. _Contribution Guide: http://docs.zephyrproject.org/latest/contribute/index.html .. _Zephyr GitHub wiki: https://github.com/zephyrproject-rtos/zephyr/wiki .. _Zephyr Development mailing list: https://lists.zephyrproject.org/g/devel .. _Zephyr mailing list subgroups: https://lists.zephyrproject.org/g/main/subgroups .. _Sample and Demo Code Examples: http://docs.zephyrproject.org/latest/samples/index.html .. _Security: http://docs.zephyrproject.org/latest/security/index.html .. _Asking for Help Tips: https://docs.zephyrproject.org/latest/develop/getting_started/index.html#asking-for-help