时间单位:
毫秒(ms)、微秒 (μs)、纳秒(ns)、皮秒(ps)、飞秒(fs)、阿秒、渺秒 1 s = 10^3 ms = 10^6 us = 10^9 ns = 10^12 ps = 10^15 fs=10^18阿秒=10^21渺秒=10^43普朗克常数
在Linux Driver开发中
经常要用到延迟函数:msleep,mdelay、udelay
mdelay忙等待函数(相当于for循环)
在延迟过程中无法运行其他任务,这个延迟的时间是准确的,是需要等待多少时间就会真正等待多少时间,而msleep是休眠函数,它不涉及忙等待,你如果是msleep(10),那实际上延迟的时间,大部分是要多余10ms的,是个不定的时间值。
他们的差异
平时我也讲的出来,可是真正用起来的时候,就忘记了,曾在两个driver的i2c的code中,需要用到的delay函数,而我用了msleep函数,一直i2c碎度超慢,而我又不知道哪里出了问题,我潜意识中,认为我只delay了1ms,可是,实际上是十几毫秒。
这几个函数都是内核的延时函数
udelay()、mdelay()、ndelay(),实现原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的视线往往会碰到编译器的警告implicit declaration of function'udelay',这往往是由于头文件的使用不当造成的。
udelay一般适用于一个较小的delay
如果你填的额数大于2000,系统会认为你这个是一个错误的delay函数,因此,如果需要2ms以上的delay需要使用mdelay函数.
由于这些delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将使得调用它的进程睡眠参数指定的时间。