Linux驱动-内核定时器

内核定时器是Linux驱动开发中的一个重要概念,它不是高精度定时器,主要用于一次性或周期性的任务调度。通过`DEFINE_TIMER`定义定时器,`init_timer`初始化,`add_timer`注册,`mod_timer`调整超时时间,以及`del_timer`删除定时器。文章提供了相关函数的使用示例,如在`timer_cb_func`中如何实现周期性执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux驱动-内核定时器

  • Fang XS.
  • 1452512966@qq.com
  • 如果有错误,希望被指出

前言

  • 内核定时器是一种类似闹钟的定时器。
  • 内核定时器不能作为高精度定时器使用。
  • 内核定时器默认只启动一次定时,要周期定时需要重新启动定时器。

内核定时器

  • 头文件#include <linux/timer.h>
  • 内核定时器使用timer_list结构体进行描述

相关操作函数和宏

  1. 时间转换函数
函数名unsigned long usecs_to_jiffies(const unsigned int u)
功能将us转换成时钟节拍数
形参u 要转换的值
返回值时钟节拍数
函数名unsigned long msecs_to_jiffies(const unsigned int m)
功能将ms转换成时钟节拍数
形参m 要转换的值
返回值时钟节拍数
  1. 相关操作函数和宏
/**
 * 定义一个定时器
 * @param _name 变量名
 * @param _function 超时处理函数
 * @param _expires 超时时间
 * @param _data 要传递给超时处理函数的参数
*/
#define DEFINE_TIMER(_name, _function, _expires, _data)     \
    struct timer_list _name =               \
        TIMER_INITIALIZER(_function, _expires, _data)
函数原型#define init_timer(timer)
函数功能初始化定时器
函数参数timer要初始化的定时器
函数原型void add_timer(struct timer_list *timer)
函数功能向 Linux 内核注册定时器
函数参数timer要注册的定时器
函数返回值
函数原型int mod_timer(struct timer_list timer, unsigned long expires)
函数功能修改定时器超时时间
函数参数timer对应的定时器结构体
函数参数expires超时时间
函数返回值成功则返回 修改成功的时间值
函数原型int del_timer(struct timer_list *timer)
函数功能关闭定时器
函数参数timer要删除的定时器
函数返回值返回0:成功

模板

#include <linux/timer.h>
/*--------------省略其他代码---------------*/
/* Linux-5.7.1 部分函数和宏有一定区别 */
void timer_cb_func(struct timer_list *tl);
DEFINE_TIMER(test_timer,timer_cb_func);

void timer_cb_func(struct timer_list *tl){
	printk("timer_cb_func..\n");
	mod_timer(&test_timer, jiffies + 1*HZ);
}

static int __init dev_init(void){
	test_timer.expires = jiffies + 1*HZ;
	add_timer(&test_timer);
	printk("dev_init..\n");
	return 0;
}

static void __exit dev_exit(void){
	del_timer(&test_timer);
	printk("dev_exit..\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值