原创 linux设备驱动学习笔记10------------定时器的初步了解

2009-12-3 20:59 2371 7 7 分类: MCU/ 嵌入式

struct timer_list {
 struct list_head list;
 unsigned long expires; //定时器到期时间
 unsigned long data; //作为参数被传入定时器处理函数
 void (*function)(unsigned long);


   struct timer_base_s *base;
 };


下面是关于timer的API函数:


  初始化定时器
   void add_timer(struct timer_list * timer);


增加定时器


void add_timer(struct timer_list * timer);


删除定时器


int del_timer(struct timer_list * timer);
  
  
int del_timer_sync(struct timer_list * timer);


需要确保定时器函数当前不在其他cpu上运行。


修改定时器的expire
int mod_timer(struct timer_list *timer, unsigned long expires);


 使用定时器的一般流程为:


(1)创建timer、编写function;


(2)为timer的expires、data、function赋值;


(3)调用add_timer将timer加入列表;


(4)在定时器到期时,function被执行


(5)在程序中涉及timer控制的地方适当地调用del_timer、mod_timer删除timer或修改timer的expires。


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>
MODULE_LICENSE("GPL");
struct timer_list mytimer;
void  mytimer_ok(unsigned long expires)
{
    printk("Mytimer is ok\n");
}

static int __init hello_init (void)

{

    printk("Hello module init\n");
    init_timer(&mytimer);
    mytimer.expires = 10000;
    mytimer.function = mytimer_ok;
    add_timer(&mytimer);
    return 0;

}

static void __exit hello_exit (void)

{
    del_timer(&mytimer);
    printk("Hello module exit\n");

}

module_init(hello_init);

module_exit(hello_exit);


将这个驱动编译成模块的形式,然后调用insmod 将他加载入内核


会出现如下的界面:


9c6b09de-5728-4ce8-bbdc-a2b3b231c45d.gif

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条