linux系统有两个时钟:一个是由电池驱动的RTC,被称为硬件时钟,
断电后还是继续计时。
另一个是内核时钟或者软件时钟,软件根据时钟中断来计数,断电后不存在。
时钟周期:晶体振荡器在1秒内产生的时钟脉冲个数。
时钟中断:当时钟计数器减到0时就会产生一次中断。
时钟中断频率(HZ):1秒内timer产生的时钟中断个数。
jiffy作为全局变量用来记录自系统启动以来的节拍数。
extern u64 __jiffy_data jiffies_64;
extern unsigned long volatile __jiffy_data jiffies;
在32位处理器上用32位来表示,64位处理器上用64位表示,
在32位系统上jiffies取jiffies_64得低32位。
32位系统上面,jiffies可能会溢出,下面用四个宏定义来避免溢出的问题:
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)((b) - (a)) < 0))
#define time_before(a,b) time_after(b,a)
#define time_after_eq(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)((a) - (b)) >= 0))
#define time_before_eq(a,b) time_after_eq(b,a)
time_after(a,b) a>b 返回ture,
time_after_eq(a,b) a>=b 返回true
time_before(a,b) a<b 返回true
time_before_eq(a,b) a<=b 返回true
BogoMIPS这个值不是为了表示机器性能,主要是被udelay和mdelay函数使用,
用来做延时使用。这两个函数是忙等待延迟函数,根据每秒中处理器能执行的
循环数计时。
断电后还是继续计时。
另一个是内核时钟或者软件时钟,软件根据时钟中断来计数,断电后不存在。
时钟周期:晶体振荡器在1秒内产生的时钟脉冲个数。
时钟中断:当时钟计数器减到0时就会产生一次中断。
时钟中断频率(HZ):1秒内timer产生的时钟中断个数。
jiffy作为全局变量用来记录自系统启动以来的节拍数。
extern u64 __jiffy_data jiffies_64;
extern unsigned long volatile __jiffy_data jiffies;
在32位处理器上用32位来表示,64位处理器上用64位表示,
在32位系统上jiffies取jiffies_64得低32位。
32位系统上面,jiffies可能会溢出,下面用四个宏定义来避免溢出的问题:
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)((b) - (a)) < 0))
#define time_before(a,b) time_after(b,a)
#define time_after_eq(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)((a) - (b)) >= 0))
#define time_before_eq(a,b) time_after_eq(b,a)
time_after(a,b) a>b 返回ture,
time_after_eq(a,b) a>=b 返回true
time_before(a,b) a<b 返回true
time_before_eq(a,b) a<=b 返回true
BogoMIPS这个值不是为了表示机器性能,主要是被udelay和mdelay函数使用,
用来做延时使用。这两个函数是忙等待延迟函数,根据每秒中处理器能执行的
循环数计时。