Linux使用定时器消抖
来源:互联网 发布:淘宝详情自动生成鲁班 编辑:程序博客网 时间:2024/06/05 19:29
按键去抖动的方法主要有两种,一种是硬件电路去抖动;另外一种就是软件延时去抖。而延时又一般分为两种,一种是for循环等待,另一种是定时器延时。在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器。
Linux内核使用struct timer_list来描述一个定时器:
{
struct list_head entry;
unsigned long expires; //定时器定时时间
void (*function)(unsigned long);//定时器发生后调用函数
unsigned long data;
struct tvec_base *base;
};
Linux内核定时器使用流程:
1.定义定时器变量
2.初始化定时器
2.1init_timer初始化
2.2设置超时函数
3.add_timer注册定时器
4.mod_timer启动定时器
struct work_struct *work;
struct timer_list xxx_timer;
/* 当进入中断函数,首先执行关于中断硬件的部分,然后调用工作队列工作work_func */
/* work_func函数调用mod_timer开启定时器,开始计时,计时结束后调用xxx_timer_function函数*/
/* 进入xxx_timer_function函数识别中断源,执行中断函数功能*/
void work_func(struct work_struct *work)
{
mod_timer(&xxx_timer, jiffies + (HZ /10));
//jiffies是一个全局变量,表示现在的时间(使用滴答表示,一秒一千个滴答),
//一个HZ是一秒,HZ /10表示一百个毫秒
}
void xxx_timer_function(unsigned long data)
{
}
irqreturn_t xxx_int(int irq, void *dev_id)
{
//执行关于硬件部分程序
//提交下半部
schedule_work(work);
//return 0;
return IRQ_HANDLED;
}
int xxx_open(struct inode *node,struct file *filp)
{
return 0;
}
struct file_operations xxx_fops =
{
.open = xxx_open,
};
struct miscdevice xxx_miscdev = {
.minor = 200,
.name = " ",
.fops = &xxx_fops,
};
static int xxx_init()
{
//注册混杂设备
misc_register(&xxx_miscdev);
//注册中断处理程序
request_irq(IRQ_EINT0,xxx_int,IRQF_TRIGGER_FALLING," ",0);
//创建工作(队列工作)
work = kmalloc(sizeof(struct work_struct),GFP_KERNEL);
INIT_WORK(work, work_func);
/* 初始化定时器 */
init_timer(&xxx_timer);
/* 指定定时器中断发生后调用函数 */
xxx_timer.function = xxx_timer_function;
/* 向内核注册一个定时器 */
add_timer(&xxx_timer);
return 0;
}
static void button_exit()
{
/* 注销混杂设备 */
misc_deregister(&xxx_miscdev);
}
module_init(xxx_init);
module_exit(xxx_exit);
- Linux使用定时器消抖
- linux定时器的使用
- linux定时器的使用
- linux定时器的使用
- linux定时器的使用
- linux 定时器使用一
- linux 定时器使用二
- Linux定时器的使用
- linux定时器的使用
- linux定时器的使用
- Linux下定时器使用
- linux定时器使用范例
- linux定时器的使用
- linux定时器的使用
- Linux定时器的使用
- Linux定时器的使用
- linux定时器的使用
- linux 定时器使用
- ant 非法字符:\65279 错误
- CColorStatic 改变颜色
- Myeclipse 2014 破解方法
- 开始博客记录
- [置顶] 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- Linux使用定时器消抖
- FSM之SMC使用总结
- android ndk
- 说说JSON和JSONP 也许你会豁然开朗
- 关于Hadoop学习的感悟(一)
- win7 64位操作系统 配置pl\sql dev
- nginx源码分析—模块及其初始化
- Merkle Tree(HashTree)
- 保留用于局域网的地址