提问人:Vijay Katoch 提问时间:11/25/2013 最后编辑:NmkVijay Katoch 更新时间:9/15/2023 访问量:800
Linux 计时器在某个时间挂起并在 1ns 处停止
Linux timer hangs sometime and stops at 1ns
问:
我有一个带有 PowerPC 5200 的嵌入式主板,运行 Realtime Linux 版本 2.6.33。
我的应用程序在 Linux 中使用一个高分辨率计时器进行警报。此计时器有时不会过期。该问题很少发生,每次在系统上发生时可能会持续数月。
计时器由具有绝对时间的功能设置。
当计时器没有过期时,我做了一些有趣的观察:timer_settime
- 函数返回剩余时间 1ns。
timer_gettime
- 通过显示文件来检查活动计时器,并且未在活动计时器列表中显示此计时器。
/proc/timer_list
timer_list
我研究了 Linux 源代码并发现了一种可能的情况:
该函数以函数 () 结束。如果计时器处于活动状态且剩余时间为 ,则返回函数。这意味着计时器已倒计时,计时器状态必须为“排队”或“回调”。timer_gettime
common_timer_get
posix-timers.c
common_timer_get
it_value.tv_nsec = 1
<= 0
假设它处于“回调”状态,这意味着它正在函数()中运行。函数正在调用函数,该函数在将计时器状态从“排队”更改为“回调”之前从计时器活动列表中删除计时器。__run_hrtimer
hrtimer.c
__run_hrtimer
__remove_hrtimer
在将计时器状态更改为“callback”和清除状态“callback”的函数末尾之间,在函数中调用了多个函数。如果它挂在这里,当定时器不在活动列表中时,该函数可能会返回 1ns。在这里,它调用了 Linux 内核中的几个函数和应用程序中的回调函数。__run_hrtimer
timer_gettime
我已经检查了我的应用程序中的回调函数。它发出信号量信号,并在同一线程上再次设置计时器。我不明白为什么这不应该起作用。
有没有人见过类似的案例?
是否有人知道这里出了什么问题?
答: 暂无答案
评论