jiffies用法
jiffies定義在
#include<linux/jiffies.h>
unsigned long j ,stamp_1,stamp_half,stamp_n;
j = jiffies /* 讀取當時的時戳 */
stamp_1 = j + HZ; /* 1秒之後 */
stamp_half = j + HZ/2; /* 半秒之後 */
stamp_n = j + n*HZ /1000 /* n毫秒之後 */
當每發生一次中斷時,jiffies的值便會+1,假定HZ=100,1個jiffies間隔秒數為1/100秒,jiffies可以記錄的最大秒數為(2^32 -1)/100=42949672.95秒,約497天就會發生溢位造成時間錯亂,要避免這種情形,核心有提供一組巨集,讓我們可以在不擔心溢位的情形下,正確比較出兩個時刻之間的前後關係:
#include<linux/jiffies.h>
int time_after(unsigned long a,unsigned long b);
int time_before(unsigned long a,unsigned long b);
int time_after_eq(unsigned long a,unsigned long b);
int time_before_eq(unsigned long a,unsigned long b);
詳細的用法可以參考以下連結: http://blog.csdn.net/jk110333/article/details/8177285
處理時間格式
一般要將jiffies處理成時間格式會用到兩個資料結構struct timeval
以及strcut timespec
。這兩個結構同樣都是用兩個數值來表達一個精確的時刻。較舊但是較多人用的是timeval結構,是以秒跟毫秒組成,較新的timespec,則是以秒以及奈秒組成。
unsigned long timespec_to_jiffies(struct timespec *value);
unsigned long timeval_to_jiffies(struct timeval *value);
void jiffies_to_timespec(unsigned long diffj,struct timespec *value);
void jiffies_to_timeval(unsigned long diffj,struct timeval *value);