Linux 驅動的 雜亂函式記錄
阿新 • • 發佈:2020-08-27
1.DECLARE_WAIT_QUEUE_HEAD
/* 定義並初始化一個等待佇列頭 */
1.static DECLARE_WAIT_QUEUE_HEAD(waiter);
static int i2c_flag ; //定義一個全域性喚醒變數
2.wait_event_interruptible(waiter, i2c_flag != 0); //喚醒變數 != 0,則執行這句之後程式碼
在特殊的地方喚醒等待佇列
3.wake_up_interruptible(&waiter);
i2c_flag = 1;
2.timer_list 核心定時器
1.struct timer_list timer; //定義定時器 2.setup_timer(timer, fn, data) //設定超時函式,原始碼如下: static inline void setup_timer(struct timer_list * timer, void (*function)(unsigned long), unsigned long data) { timer->function = function; timer->data = data; //回撥函式的引數 init_timer(timer); } 3.void add_timer(struct timer_list *timer) //註冊定時器 int del_timer(struct timer_list *timer) //刪除 4.int mod_timer(struct timer_list *timer, unsigned long expires) //設定事件 如: mod_timer(&timer, jiffies+Hz/100);定時10ms
3.核心時鐘概念 摘抄來自:(對linux核心中jiffies+Hz表示一秒鐘的理解)
1.時鐘分為硬體時鐘(實時時鐘)和軟體時鐘(系統時鐘) 2.節拍率其實就是系統定時器產生中斷的頻率,所謂頻率即指中斷每秒鐘產生多少次,即Hz(赫茲)。不同的體系結構的系統而言,節拍率不一定相同。 節拍率(Hz)的值可以在檔案include/asm-x86/param.h中看到,定義如下: #define Hz 1000 3.節拍 :節拍就是指系統中連續兩次時鐘中斷的間隔時間,該值等於節拍率分之一,即1/Hz。因為系統再啟動時已經設定了Hz,所以系統的節拍也可以確定。核心正是利用節拍來計算系統時鐘和系統執行時間的 4.jiffies在核心中是一個全域性變數,它用來統計系統啟動以來系統中產生的總節拍數,這個變數定義在include/linux/jiffies.h中,定義形式如下。 unsigned long volatile jiffies;
待續...