0

我在 linux 嵌入式系统上有一个 C 小代码。我目前每 50 毫秒执行一次算法。

有人建议我使用nanosleep,但它会使我的算法执行时间比每 50 毫秒长一点:timetorun(algorithm) + nanosleep(50ms)

所以我选择了警报选项,修改了一个 volatile 变量。为了等待警报,我使用了一个空的繁忙循环。我不喜欢我正在采取的方法,我认为必须有更好的方法来做到这一点。有什么建议么?也许是一种使用闹钟唤醒 nanosleep() 的方法?

4

2 回答 2

0

如果可用,请使用timerfd. 如果没有,则派生第二个进程作为计时器。计时器以所需的时间间隔写入管道。无论哪种方式,您的进程都会在从管道读取时阻塞,并在收到字节时开始执行。

于 2013-10-17T14:07:18.843 回答
0

nanosleep()保证调用它的线程至少暂停指定的数量,而不是完全指定的数量。

nanosleep() 暂停调用线程的执行,直到至少经过 *req 中指定的时间,或者传递触发调用线程中的处理程序调用或终止进程的信号。

但是,以下技巧可能会起作用:比预期的睡眠时间短一点,然后测量缺少多少时间,然后调用另一个nanosleep(). 这个想法是nanosleep()在很短的时间间隔内可以使用忙等待。它仍然不能保证你得到你想要的时间。

除此之外,如果您有非常严格的时序要求,您可能还想使用实时优先级。

于 2020-08-03T10:02:31.767 回答