1. 应用程序的延时函数
#include <unistd.h>
unsigned int sleep(unsigned int sec) //延时秒
int usleep(unsigned int usec) //延时微秒
2. 驱动程序
睡眠延时,会形成阻塞,导致进程调度(长延时)。使当前进程进入睡眠状态,等待一定的毫秒和微秒时间,同时释放CPU资源
优点:优点不占用 CPU 资源。
缺点:时间精确度低
#include <linux/delay.h>
void ssleep(unsigned int seconds) //秒级别
void msleep(unsigned int msecs) //毫秒级别
3. 驱动程序
忙等待延时,对于长时间的忙等待意味这无谓的耗费着 cpu 的资源
优点:时间精确度高
缺点:占用 CPU 资源
#include <linux/delay.h>
void ndelay(unsigned long x) //纳秒级别
void udelay(unsigned long usecs) //微秒级别
void mdelay(unsigned long msecs) //毫秒级别
注:
udelay 一般适用于一个比较小的 delay,如果你填的数大于 2000,系统会认为你这个是一个错误的 delay 函数,
因此如果需要 2ms 以上的 delay 需要使用 mdelay 函数。
关于精确的延时,建议还是使用高精确的定时器硬件去实现微秒级别延时,因为内核只能提供毫秒级别的定时
器中断。