内核学习——6、timer的学习和使用

timer常用接口:

  • 1、初始化timer:
    void init_timer_key()
    {
    debug_init();
    do_init_timer(); //这里初始化了一些通用性参数,也初始化了链表节点
    }
  • 2、初始化完成后,需要使用add_timer函数将初始化的参数加到定时器链表中去
    注意:内核定时器是一个单次的定时器
    void add_timer()
    {
    BUG_ON(timer_pending(timer)); //检查该timer有没有被挂起
    mod_timer(timer, timer->expires); //,没有被挂起,则修改定时器到期时间
    }
    mod_timer函数还是调用mod_timer函数来加入定时器链表中的
  • 3、删除定时器:
    del_timer
  • 4、简单实例:
    #include <linux/time.h>
    /* 定义一个定时器指针*/
    static struct timer_list *timer;
    /参数是timer中的变量data /
    void func_handle(unsigned long data)
    {
    //做想做的事情
    /因为内核定时器是一个单次的定时器,所以如果想要多次重复定时时需要在定时器绑定的函数结尾重新装载时间,并启动定时 /
    /kernel timer restatr /
    mod_timer(timer, jiffies + HZ/50)
    }

int xx_init(void)

{

timer = kzalloc(sizeof(struct timer_list), GFP_KERNEL)

...

init_timer(timer); //初始化定时器

timert->function = func_handle; //绑定定时时间到后的执行函数

timer->expites = jiffres + (HZ/50); //定时的时间点,当前时间的20ms之后

add_timer(timer); //添加并启动定时器

}

void xxx_exit(void)

{

...

del_timer(timer);

}

module_init(xxx_init);

module_exit(xxx_exit);

MODULE_LICENSE("GPL");

相关推荐
mpHH5 分钟前
postgresql plancache --doing
数据库·学习·postgresql·1024程序员节
Dream_言十17 分钟前
光通信|高效动态的自由空间-光纤CVB通信
学习·论文笔记·1024程序员节
小志biubiu1 小时前
linux_缓冲区及简单libc库【Ubuntu】
linux·运维·服务器·c语言·学习·ubuntu·c
奋斗的牛马3 小时前
FPGA—ZYNQ学习GPIO-EMIO(三)
学习·fpga开发
py有趣3 小时前
LeetCode算法学习之合并区间
学习·算法·leetcode
青衫码上行3 小时前
【Java Web学习 | 第1篇】前端 - HTML
java·前端·学习
charlie1145141913 小时前
HTML 理论笔记
开发语言·前端·笔记·学习·html·1024程序员节
知识分享小能手4 小时前
uni-app 入门学习教程,从入门到精通,uni-app 企业项目实战:鲁嗑瓜子项目开发知识点(9)
前端·javascript·学习·微信小程序·小程序·uni-app·vue
知识分享小能手4 小时前
uni-app 入门学习教程,从入门到精通,uni-app中uCharts组件学习((8)
vue.js·学习·ui·微信小程序·小程序·uni-app·echarts
Yupureki5 小时前
从零开始的C++学习生活 14:map/set的使用和封装
c语言·数据结构·c++·学习·visual studio·1024程序员节