關於linux hrtimer高精度定時器的使用註意事項
阿新 • • 發佈:2019-03-24
linux設備驅動 mar 定時函數 src int 這樣的 vpd 由於 高精 關於linux hrtimer高精度定時器的使用註意事項
需要註意:
由於hrtimer本身沒有interval周期的概念,
如果要實現hrtimer的周期調用,
方法1) 超時函數,調用hrtimer_start(, tim,HRTIMER_MODE_REL);即把timer根據此tim超時時間插入到timer_base的隊列中, 並返回HRTIMER_NORESTART
方法2) 超時函數,調用hrtimer_forward()或者hrtimer_forward_now(), 把hrtimer的_softexpires和timerqueue_node.expires往後退一個interval的時間,然後函數返回HRTIMER_RESTART。 此後由__run_hrtimer()調用enqueue_hrtimer()來自動重新插入到timer_base的隊列中。
如果方法2)中,如果不調用hrtimer_forward()或者hrtimer_forward_now(), 而直接返回HRTIMER_RESTART,那麽定時函數的超時周期就變成timer_base的resolution分辨率的周期來運行了,這樣的resolution,頻率太高。
具體參見我的《如何編寫linux設備驅動》視頻課程:
https://edu.51cto.com/course/17132.html
另外我的相關培訓視頻請看:
歡迎觀看我發布的各個課程: https://edu.51cto.com/lecturer/8896847.html
關於linux hrtimer高精度定時器的使用註意事項