gpt4 book ai didi

c - µs-precision wait in C for linux that does not put program to sleep?

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:00 25 4
gpt4 key购买 nike

我真的很想在我编写的 C 程序中实现 25µs 的延迟,以通过 RPi 3 读取传感器。我使用了 nanosleep() 和 usleep(),但精度似乎有点偏差——可能是因为该程序将线程时间割让给其他程序,然后必须等待它们完成。我运行“nice -n -20”以确保优先级,但它似乎仍然不如我想要的那么准确。我也尝试了一个 for 循环,但不能完全确定获得 25 µs 所需的时钟滴答:for 循环计数比率(我对这一切都很陌生)......或者 gcc 可能正在优化空循环被遗忘?

无论如何,有人可以指出 microDelay() 函数或类似函数的方向吗? (我花了几个小时谷歌搜索和试验,但似乎无法找到我正在寻找的东西)。谢谢!

最佳答案

在没有硬件支持的传统多任务操作系统中几乎不可能实现这种低分辨率(小于 1 毫秒),但有一种软件技术可以帮助您。 (我之前测试过)

软件延迟循环不是准确的解决方案,因为操作系统的调度程序会抢占进程。但是你可以用 RT_PREEMPT 修补你的内核并通过 CONFIG_RT_PREEMPT 启用它,现在你有了一个支持实时调度的内核,实时内核让你运行一个具有实时优先级的进程,具有实时优先级的进程一直运行到它想要没有人可以抢占它为止,因此,如果您运行延迟循环,该进程将不会被操作系统抢占,因此您可以使用这些循环创建准确的延迟。

关于c - µs-precision wait in C for linux that does not put program to sleep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com