Kernel5.4 Timer定时器使用

一.需求

设置一个定时器timer,产生中断时timer清零(避免定时器和中断打架同时上报):

当timer timeout模拟弹起事件(上报所有按键)避免按键一直处于按下状态;

二.API接口

#include <linux/module.h>

#include <linux/init.h>

#include <linux/timer.h>

static struct timer_list my_timer; //声明定时器全局变量

static void my_timer_function(struct timer_list *t); //定义定时器到期执行函数

timer_setup(&my_timer, my_timer_function, 0); //设置定时器

mod_timer(&my_timer, jiffies + msecs_to_jiffies(60)); //6表示6* 10ms即设置超时60ms

del_timer(&my_timer); //删除定时器

三.代码

复制代码
#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>

static struct timer_list	my_timer;  //声明定时器全局变量
static void my_timer_function(struct timer_list *t);  //定义定时器到期执行函数

//probe初始化定时器变量的function和data字段
timer_setup(&my_timer, my_timer_function, 0);	
//设置超时60ms
mod_timer(&my_timer, jiffies + msecs_to_jiffies(60)); //6表示6个滴答后超时即6* 10ms

//remove时删除定时器
del_timer(&my_timer);

//定时器服务函数
static void my_timer_function(struct timer_list *t)
{
//判断是触发哪个定时器
if(t == &my_timer){
num=4;
for(i=0;i<num;i++)
{
    key_report_value(sn7326_array_uni[i].i2c_up_value);	
}
//定时器到时后需要重新设置time时间,否则定时器到期后不再执行
//并激活timer
mod_timer(&my_timer, jiffies + msecs_to_jiffies(60)); //6表示6个滴答后超时即6* 10ms
}
}


//触发中断后,清零定时器。避免定时器和中断打架同时上报
del_timer(&my_timer); //有中断产生后清零定时器
//中断完成后重新设置定时器
timer_setup(&my_timer, my_timer_function, 0);	
//设置timer时间为60ms
mod_timer(&my_timer, jiffies + msecs_to_jiffies(60)); //60 ms转换未系统节拍数
相关推荐
写代码的学渣4 小时前
Ubuntu/麒麟默认锁定root账户
linux·运维·ubuntu
wdfk_prog4 小时前
[Linux]学习笔记系列 -- [block]bfq-iosched
linux·笔记·学习
LCG元5 小时前
Linux 文本处理三剑客(grep, sed, awk)核心用法与实战
linux
RisunJan5 小时前
Linux命令-exportfs命令(管理NFS服务器上共享文件系统)
linux·运维·服务器
动感小麦兜5 小时前
服务器搭建
linux·服务器·python
LCG元6 小时前
效率翻倍!10个让你爱不释手的 Linux 命令行"神器"
linux
BS_Li6 小时前
【Linux系统编程】Ext系列文件系统
android·linux·ext系列文件系统
q***01776 小时前
Linux 下安装 Golang环境
linux·运维·golang
企鹅侠客6 小时前
Linux性能调优使用strace来分析文件系统的性能问题
linux·运维·服务器
奔跑吧邓邓子8 小时前
CentOS 7性能飞升秘籍:实战系统优化与调优
linux·运维·centos·实战·系统优化·性能调优