Linux 的 jiffies 是一个unsigned类型, time_after 宏是通过把两个时间转成signed来比较。
这里有一个前提,两个时间相差不超过jiffies最大值的一半,即使在32位系统上HZ=1000,这个时间也有25天.
#include <stdio.h>
int main (void)
{
unsigned char a = 254;
unsigned char b = 254;
int i;
for (i = 0; i <= 256; i++, a++)
{
printf ("Unsigned: %u - %d = %d Signed: %d - %d = %d\n", (unsigned int)a, (unsigned int)b, (int) (a - b), (int) (char)a, (int)(char)b, (int) ((char)a - (char)b));
}
return 0;
}