1

我有一个基本上是 TIMER 的任务;所以它进入睡眠状态并且应该定期唤醒。所以计时器任务睡眠了 10 毫秒。但是正在发生的事情是它在唤醒方面不一致,并且不能依靠它来正确地及时唤醒。

事实上,在我的跑步中,睡眠时间有很大的不同。有时它会在觉醒时变化 1-2 毫秒,并且很少会完全恢复。这是因为内核调度程序将所有休眠和等待的任务放在一个队列中,然后当它轮询查看谁将被唤醒时,我认为这是轮询。所以有时任务会在调度程序再次轮询时过期。有时,当出现中断时,ISR 会获得控制权并延迟定时器的唤醒。

处理此类问题的最佳解决方案是什么?

(附加细节:任务是无线网络的 MAC 定时器;RTOS 是 u-velOSity 微内核)

4

3 回答 3

2

您应该使用操作系统提供的计时器 API,而不是依赖调度程序。下面介绍Linux 驱动程序的定时器 API

于 2011-10-20T09:56:10.800 回答
1

如果您需要核心计时,操作系统调度程序可能不够好(正如您所发现的那样)。

如果可以的话,使用一个单独的定时器外设,并使用它的 ISR 来做尽可能少的事情(例如时间戳一些关键数据,设置一些标志),然后让你的高抖动例程使用该数据它的时间保证较少。

于 2011-10-20T12:11:11.577 回答
0

Linux 不是 RTOS,这可能是您问题的根源。

您可以通过各种方式和不同程度使 Linux 更适合实时使用。请参阅实时 Linux 方法的比较以了解某些方法以及对您可以预期的实时性能水平的评估。

于 2011-10-22T08:21:55.283 回答