一、linux驱动开发-5.1-内核定时器

目录

一、时间管理和内核定时器

1.1、时间管理

 1.2、内核定时器

1.3、定时器API

1.3.1、init_timer

 1.3.2、add_timer

1.3.3、del_timer

1.3.4、del_timer_sync

1.3.5、mod_timer

1.3.6、内核短延时函数

二、驱动程序

三、应用程序

四、测试


一、时间管理和内核定时器

1.1、时间管理

       linux内核使用全局变量jiffies来记录系统从启动以来的系统节拍数,系统启动的时候会将jiffies初始化为0。

        内核提供了几个jiffies和ms、us、ns之间的转换函数

 1.2、内核定时器

       内核定时器并不是周期性运行的,超时以后会自动关闭,因此如果想要实现周期性定时,那么需要在定时处理函数里重新开启定时器。内核定义如下:

struct timer_list {
    struct list_head entry;
    unsigned long expires; /* 定时器超时时间,单位是节拍数 */
    struct tvec_base *base;
    void (*function)(unsigned long); /* 定时处理函数 */
    unsigned long data; /* 要传递给 function 函数的参数 */
    int slack;
};

       expires表示超时时间,单位为节拍数,比如现在需要定义一个周期为2秒的定时器,那么这个定时器超时时间为jiffies+(2*HZ),因此expires=jiffies+(2*HZ)。

1.3、定时器API

1.3.1、init_timer

       定义一个time_list变量后要用init_timer初始化一下。

/*
@Decription:初始化定时器
@timer:要初始化的定时器
*/
void init_timer(struct timer_list *timer)

 1.3.2、add_timer

       用于向内核注册一个定时器,注册成功以后,定时器就会开始运行。

/*
@Decription:注册定时器
@timer:要注册的定时器
*/
void add_timer(struct timer_list *timer)

1.3.3、del_timer

       用于删除定时器,不管定时器有没有被激活,都可以用来删除定时器

        在多处理器系统上,定时器可能会在其他的处理器上运行,因此在调用 del_timer 函数删除定时器之前要先等待其他处理器的定时处理器函数退出

/*
@Decription:删除定时器
@timer:要删除的定时器
@return:0,定时器还没被激活
         1,定时器已经激活
*/
int del_timer(struct timer_list *timer)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值