本系列文章主要講Linux中的中斷和時間管理,文章機構如下:
01 - 驅動中的中斷處理
02 - 中斷下半部 tasklet
03 - 中斷的下半部 workqueue
04 - Linux中的延時操作函數
05 - Linux硬件定時 jiffies
06 - Linux 低分辨率定時器
07 - Linux高分辨率定時器
1 延時函數
在硬件操作中經常會用到延時,內核提供了一組延時操作函數
#define mdelay(n) udelay((n) * 1000) // ms級延時
void udelay(unsigned long usecs) // us級延時
void ndelay(unsigned long nsecs) // ns級延時
這些延時函數都是忙等待延時,是靠白白消耗CPU的時間來得到延時的,如果沒有特殊的理由不推薦使用這些函數來獲得較長的延時時間
2 休眠延時函數
如果延時時間較長有沒有特殊的要求,可以使用休眠延時
void msleep(unsigned int msecs) // ms級延時,休眠時不能被信號打斷
void ssleep(unsigned int seconds) // s級演示,休眠時不能被信號打斷
unsigned long msleep_interruptible(unsigned int msecs) // 休眠時可以被信號打斷