gpt4 book ai didi

linux - 如何在linux内核中实现精确定时器

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

当我编写红外遥控驱动程序时,我必须在启用和禁用 PWM 期间控制延迟准确时间。

起初我在内核中使用了 udelay() 函数,但我发现它根本不准确,正如我在另一个 post 中所说的那样

AFAIK,由于调度程序,内核提供的其他超时功能无法提供准确的时间,当超时时,内核仍然需要一些时间来切换到我的进程。

为此我应该使用什么函数?

最佳答案

在您上面提到的帖子中,ndelay 中存在舍入错误的问题,您通过使用大参数(10000 纳秒)调用函数并进一步调用它 400 次。正如我所指出的,udelay 的舍入误差实际上非常小。

要么你需要微秒分辨率,在这种情况下,udelay 似乎没问题。或者你需要纳秒分辨率,在这种情况下,不要用它来等待 400 万纳秒,你不会有那个级别的错误。 (我很难想象一种设备需要您等待数百万纳秒 [甚至数万纳秒],然后期望您在几纳秒内使用react。)

由于您显然希望在不允许任务切换的情况下进行轮询,因此另一种选择是使用 ktime_get 来获得单调递增的纳秒分辨率时间并小心维护校正。然后,您可以进行自己的差异计算,以确定您何时等待足够长的时间。

关于linux - 如何在linux内核中实现精确定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438895/

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