定时器使用示例
使用步骤:
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文章
1384浏览量
40458 -
驱动
+关注
关注
12文章
1855浏览量
85742 -
Linux
+关注
关注
87文章
11354浏览量
210662 -
定时器
+关注
关注
23文章
3256浏览量
115522
发布评论请先 登录
相关推荐
Linux驱动开发-内核定时器
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 和 kernel/timer.c 文件
定时器、PWM、ICP范例(AVR 定时器使用范例)
/*************************************************** AVR 定时器使用范例 
发表于 11-01 01:23
•77次下载
如何利用单片机看门狗定时器使led闪烁
看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用
示例代码:用看门狗定时器使一个led闪烁
#include
void
发表于 02-11 10:00
•4019次阅读
![如何利用单片机看门狗<b class='flag-5'>定时器使</b>led闪烁](https://file1.elecfans.com//web2/M00/A7/51/wKgZomUMQ9WALuwTAAATs8yIHBQ522.jpg)
基于STM32定时器捕获测量脉宽的应用示例
来实现脉宽测量,我们可以选用一个通道、也可以使用两个通道。使用1个通道时,只需使用定时器基本的输入捕获功能结合中断或DMA即可实现;若使用两个通道时可以将捕获功能与定时器的从模式来相结合完成。这里就两种方案的实现示例都做个简单
![基于STM32<b class='flag-5'>定时器</b>捕获测量脉宽的应用<b class='flag-5'>示例</b>](https://file.elecfans.com/web1/M00/D6/6E/o4YBAF_jGbeAM_vcAAAVP2fagKE004.png)
详细剖析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次下载
![详细剖析<b class='flag-5'>Linux</b>和RTOS(RT-Thread)的时钟和<b class='flag-5'>定时器</b>的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
利用通用定时器输出PWM(附示例驱动直流电机)
上一节讲述了时钟树和基本定时器的配置方法,本节先介绍通用定时器和基本定时器的差异,然后粗略讲述PWM波原理,然后讲述如何配置通用定时器,最后进行PWM波
发表于 04-03 14:56
•0次下载
![利用通用<b class='flag-5'>定时器</b>输出PWM(附<b class='flag-5'>示例</b><b class='flag-5'>驱动</b>直流电机)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CKS32F4xx系列产品的定时器使用-基本特征和定时操作
这一课我们将介绍CKS32F4XX系列产品的定时器使用,CKS32F4XX的定时器功能十分强大,包含2个高级控制定时器,8个普通定时器,2个基础定时
![CKS32F4xx系列产品的<b class='flag-5'>定时器使</b>用-基本特征和<b class='flag-5'>定时</b>操作](https://file1.elecfans.com/web2/M00/88/6E/wKgZomRmzzmAZ1I_AAAS1hFC-3M491.jpg)
Linux高精度定时器hrtimer使用示例
要使用高精度定时器hrtimer。 使用示例 单次定时 加载驱动一秒后输出“ hrtimer handler ”: # include # include # include # in
评论