1. 電路圖
2. linux核心中使用定時器的步驟
static
struct timer_list ***_timer;
/* 定義全域性的定時器 */
init_timer
(&***_timer)
;/* 初始化定時器 */
buttons_timer.function = ***_function;
/* 設定超時呼叫函式 */
buttons_timer.expires =0;
/* 超時時間, 如果不設定預設為0 */
add_timer
(&***_timer)
;/* 向核心註冊定時器 ,當超時時間到後就會呼叫定時器函式buttons_timer_function */
mod_timer
(&***_timer, jiffies+hz/
100)
;/* 個性超時時間 */
3. 驅動**(seven_drv.c)#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 描述:使用定時器去機械抖動
* 原理:
* 在載入驅動時初始化定時器,設定超時呼叫函式,將定時器加入核心定時器鍊錶
* 在中斷函式中啟動定時器,設定超時時間為10ms去抖動
* 在超時函式中檢測輸入按鍵值,上報按鍵值
*/static
struct class *seven_drv_class;
static
struct class_device *seven_drv_class_dev;
static
struct fasync_struct *buttons_async;
static
struct timer_list buttons_timer;
/* 鍵值:按下時, 0x01, 0x02, 0x03, 0x04
* 鍵值:鬆開時, 0x81, 0x82, 0x83, 0x84
*/typedef
struct
s3c2440_buttons_desc;
s3c2440_buttons_desc pins_desc=
,,,,
};static
struct pins_desc *irq_pd;
unsigned
int key_val;
/* 等待佇列:
* 當沒有按鍵被按下時,如果有程序呼叫s3c24xx_buttons_read函式,
* 它將休眠
*/static
declare_wait_queue_head
(button_waitq)
;/* 中斷事件標誌, 中斷服務程式將它置1,s3c24xx_buttons_read將它清0 */
static
volatile
int ev_press =0;
static
void buttons_timer_function (
unsigned
long data)
irqreturn_t buttons_irq
(int irq,
void
*dev_id)
intseven_drv_open
(struct inode *inode,
struct file *file)
ssize_t seven_drv_read
(struct file *file,
char __user *buf, size_t size,
loff_t *ppos)
intseven_drv_close
(struct inode *inode,
struct file *file)
unsigned
intseven_drv_poll
(struct file *file,
struct poll_table_struct *wait)
intseven_drv_fsync
(int fd,
struct file *filp,
int on)
static
struct file_operations seven_drv_fops =
;static
int major;
static
int __init seven_drv_init
(void
)static
void __exit seven_drv_exit
(void
)module_init
(seven_drv_init)
;module_exit
(seven_drv_exit)
;module_license
("gpl"
);
4. 測試**#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define dev_device "/dev/buttons_delay"
intmain
(int argc,
char
*ar**)
while(1
)close
(fd)
;return0;
}
使用定時器實現按鍵防抖動
button.c include include include include include include include include include include include include static struct class sixthdrv class static str...
定時器的使用
為了模擬翻頁場景 為了測試記憶體是否洩露 需要用定時任務重新整理介面。寫了個小例子。一上來是空白頁,3秒鐘後顯示第1頁,以後間隔3秒,頁號增加,直到第5頁。首先,在controlller標頭檔案中增加 nstimer timer 定時器變數。在實現 中建立乙個頁號變數 import list dem...
定時器的使用
標籤 空格分隔 知識補充 cadisplaylink 螢幕1秒重新整理60次,每一次螢幕重新整理的時候就會呼叫,1秒呼叫60次 建立乙個定時器,target物件會呼叫sel方法 cadisplaylink displaylinkwithtarget id target selector sel se...