2011年7月13日 星期三

[轉][Kernel Driver] 撰寫簡易 Timer 機制

在底層 Linux Kernel 提供了時序(timing)機制,方便驅動程式設計者所使用,核心是依據硬體發出的『計時器中斷』來追蹤時間的流動狀況。我們可以依據 HZ 的值來設計 Delay 機制,讓驅動程式可以每隔固定一段時間啟動或者是發出訊號,
也可以利用 Timer 來讓 LED 閃爍變化,在介紹 Timer API 之前,
可以先參考 Linux Kernel: 簡介HZ, tick and jiffies 這篇文章,瞭解一些相關名詞,
舉例:如果想知道一秒後的 jiffies 時間,可以寫成底下:

#ifdef CONFIG_BMA150_TIMER
#include
#endif
j = jiffies;
/* 一秒之後 */
stamp_1 = j + HZ;
/* 半秒之後 */
stamp_1 = j + HZ/2;
/* 20秒之後 */
stamp_1 = j + 20*HZ;


利用 jiffies 來反算時間
diff = (long)time2 - (long)time1
msec = diff * 1000 / HZ;