jiffies用法

jiffies定義在(引入會自動引入此檔)。Jiffies為Linux核心變數,它被用來紀錄系統自開幾以來,已經過多少的tick。Tick是HZ的倒數,意即timer interrupt每發生一次中斷的時間。 如HZ為250時,tick為4毫秒(millisecond)。 範例:

#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);

results matching ""

    No results matching ""