定时器使用示例
使用步骤:
1、调用init_timer
初始化一个定时器,给struct timer_list
各成员赋值。
2、调用add_timer
将定时器添加到内核定时器链表,时间到后回调函数自动调用,用mod_timer
修改expires
的值可实现循环定时。
3、不需要定时器时,调用del_timer
删除。
单次定时
加载驱动一秒钟后,打印出“timer handler, data:520
”:
#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/sched.h >//jiffies在此头文件中定义
#include < linux/timer.h >//struct timer_list
struct timer_list timer;
static void timer_handler (unsigned long arg)
{
printk("timer handler, data:%dn", arg);
}
static int __init my_init(void)
{
printk("%s entern", __func__);
init_timer(&timer);
timer.expires = get_jiffies_64() + msecs_to_jiffies(1000);//定时1秒
timer.function = timer_handler;
timer.data = 520;
add_timer(&timer);
return 0;
}
static void __exit my_exit(void)
{
printk("%s entern", __func__);
del_timer(&timer);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
循环定时
实现循环定时就是在定时时间到了之后, 调用mod_timer函数再次修改定时时间 。
每隔一秒钟打印“timer handler, data:520
”
#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/sched.h >//jiffies在此头文件中定义
#include < linux/timer.h >//struct timer_list
struct timer_list timer;
static void timer_handler (unsigned long arg)
{
printk("timer handler, data:%dn", arg);
mod_timer(&timer, get_jiffies_64() + msecs_to_jiffies (1000));
}
static int __init my_init(void)
{
init_timer(&timer);
timer.expires = get_jiffies_64() + msecs_to_jiffies (1000);//定时1秒
timer.function = timer_handler;
timer.data = 520;
add_timer(&timer);
return 0;
}
static void __exit my_exit(void)
{
del_timer(&timer);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内核
+关注
关注
3文章
1362浏览量
40195 -
驱动
+关注
关注
12文章
1822浏览量
85121 -
Linux
+关注
关注
87文章
11215浏览量
208750 -
定时器
+关注
关注
23文章
3234浏览量
114360
发布评论请先 登录
相关推荐
Linux驱动开发-内核定时器
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 和 kernel/timer.c 文件
定时器、PWM、ICP范例(AVR 定时器使用范例)
/*************************************************** AVR 定时器使用范例 
发表于 11-01 01:23
•77次下载
如何利用单片机看门狗定时器使led闪烁
看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用
示例代码:用看门狗定时器使一个led闪烁
#include
void
发表于 02-11 10:00
•3892次阅读
基于STM32定时器捕获测量脉宽的应用示例
来实现脉宽测量,我们可以选用一个通道、也可以使用两个通道。使用1个通道时,只需使用定时器基本的输入捕获功能结合中断或DMA即可实现;若使用两个通道时可以将捕获功能与定时器的从模式来相结合完成。这里就两种方案的实现示例都做个简单
详细剖析Linux和RTOS(RT-Thread)的时钟和定时器的使用
Linux发烧友1.RTOS篇1.1RT-Thread简介1.2时钟管理1.2.1时钟节拍1.3获取系统节拍1.4定时器分类1.5定时器源码分析1.6定时器相关函数1.61动态创建一个
发表于 01-17 09:31
•4次下载
利用通用定时器输出PWM(附示例驱动直流电机)
上一节讲述了时钟树和基本定时器的配置方法,本节先介绍通用定时器和基本定时器的差异,然后粗略讲述PWM波原理,然后讲述如何配置通用定时器,最后进行PWM波
发表于 04-03 14:56
•0次下载
CKS32F4xx系列产品的定时器使用-基本特征和定时操作
这一课我们将介绍CKS32F4XX系列产品的定时器使用,CKS32F4XX的定时器功能十分强大,包含2个高级控制定时器,8个普通定时器,2个基础定时
Linux高精度定时器hrtimer使用示例
要使用高精度定时器hrtimer。 使用示例 单次定时 加载驱动一秒后输出“ hrtimer handler ”: # include # include # include # in
评论