首页 > 编程知识 正文

linux内核定时器实现,可编程定时器使用说明

时间:2023-05-03 16:00:39 阅读:111068 作者:3835

本文简要介绍了如何使用linux计时器,包括定期中断、停止和启动控制。

几个日常常用的定时器相关linux API函数:

init_timer (; 初始化计时器add_timer (; 启动定制器del_timer (; 停止计时器mod_timer (); 这些用于更改计时器当前计数时间的API位于kerneltimer.c中。 该源文件还包含常见的延迟调度函数,如常见的msleep (,schedule_timeout )。

下面以基于3.10.0-123内核的示例说明在linux上使用timer。

案例如下:

编写定时器,完成每3s周期中断和打印。 通过字符设备界面与用户层交互,写0时关闭(停止)定时器,写1时打开(启动)定时器

% E3 % 81 % 99 % E3 % 81 % aa % E3 % 82 % 8f % E3 % 81 % a1 % E3 % 80 % 81 echo % 201 % 20 % 2f demo _ deva % E3 % 81 % 3 % BC % E3 % 83 % 88 % E3 % 81 % 95 % E3 % 81 % 9b % E3 % 80 % 81 echo % 200 % 20 % 2f demo _ deva % 2f deva % E3 % 81 % 8c % E3 E3 % 81 % 9b % E3 % 82 % 8b % E3 % 80 % 82 % 20 % 23 include Linux % 2f module.h % 23 include Linux % 2f kernel.h % 23 include Linux % 23 20 include Linux % 2f ioctl.h % 23 include Linux % 2f errno.h % 23 include Linux % 2f types.h % 23 include Linux % 2f slab.h % 23 iiii ude % 27 timer _ drv.h % 27 % 2f % 2a % E6 % a9 % 9f % E8 % 83 % BD : % E3 % 82 % BF % E3 % 82 % a4 % E3 % 83 % 9e % E3 % E3 % 82 % 92 % E5 % AE % 9a % E6 % 99 % 82 % E3 % 81 % ab % E4 % b8 % ad % E6 % 96 % ad % E3 % 81 % 99 % E3 % 82 % 8b % E3 % 83 % 83 % ad % 82 % 92 % E3 % 82 % a9 % E3 % 83 % B3 % E3 % 81 % ab % E3 % 81 % 97 % E3 % 80 % 81 echo % 200 % 20 % 2f dev % 2f demo _ deva % 7 module _ license % ef % BC % 88 % 27 GPL % 27v 1.0 % 27 module % ef % BC % 89 license % 20 module _ author % ef % BC % 88 ludy % emo % ef % BC % 89 % ef % BC % 9b % 20 module _ version % ef % 88 drv _ version % ef % BC % 9b % 20 % 2f %2fstaticvolaticvolation % BC % 88 unsigned long arg % ef % BC % 89 % ef % BC % 9b % 20u8% 20 delay % 20 % 3d % 203 % ef % BC % 9b % 20 % 2f % 2f3s % 2f % % E3 % 81 % 99 % E3 % 82 % 8b % E3 % 82 % BF % E3 % 82 % a4 % E3 % 83 % 9e % E3 % 83 % BC % 2f %2fstaticstructtimer _ list my nitial izer % ef % BC % 88 Handel _ IRQ _ do _ timer % ef % BC % 8c0% ef % BC % 89 % ef % BC % 9b % 20 % E6 % 82 % a4 % E3 % 83 % 9e % E3 % 83 % BC % E5 % 89 % B2 % E3 % 82 % 8a % E8 % be % BC % E3 % 81 % BF % E5 % 87 % a6 % E7 % 90 % garg % ef % BC % 89 % 2f %2fstruct XXX _ device % 2ad ev % 3d % ef % BC % 89 struct XXX _ % ef % BC % 89 % E3 % 82 % 92 % E7 % 2a % E3 % 82 % B9 % E3 % 82 % B1 % E3 % 82 % b8 % E3 % 83 % a5 % E3 % 83 % BC % E3 % 83 % ab % E3 % 82 % BF % E3 % 82 % a4 % E4 % a4 % a4 % E3 % bb % AE % 9f % E8 % a1 % 8c % 2a % 2f mod _ timer % ef % BC % 88my _ timer % E3 % 80 % 81 jiffies % 20 % 20 % 20 delay %2ahz % ef % 81 % AE % E5 % 80 % a4 printk % ef % BC % 88 timer arrival % ef % BC % 88n % ef % BC % 89 % ef % 89 % E3 % 81 % ab % E5 % BC % 88 timer % 2a % E3 % 82 % BF % E3 % 82 % a3 % E3 % 83 % 9e % E5 % 88 % 9d % E6 % 9c % 9f % E5 % 8c % 96 % 2a %2fvoidtimer _ init _ re ef % BC % 89 pri _ data % ef % BC % 9b % 20 % 2f % 2a % E5 % 88 % 9d % E6 % 9c % 9f % E5 % 8c % 96 % E3 % 82 % BF % E3 % 82 % 82 % 2f % 2a % E3 % 83 % 87 % E3 % 83 % 90 % E3 % 82 % a3 % E3 % 82 % B9 % E6 % a7 % 8b % e9 % 80 % A0 % E4 % BD % 93 % E3 % 83 % a3 % 83 % 83 % B9 E7 % 90 % 86 % e9 % 96 % a2 % E6 % 95 % B0 % E3 % 83 % a9 % E3 % 83 % a1 % E3 % 83 % BC % E3 % 82 % BF % 2a % 2a % 22 a % E8 % be % BC % E3 % 81 % BF % E5 % 87 % a6 % E7 % 90 % 86 % e9 % 96 % a2 % E6 % 95 % b0my _ timer.expires % 20 % 3d % 20 7 % a7 % 92 % 2f % 2f my _ timer.data % 20 % 3d % 20 % 28 unsigned % 20 long % 29 dev % ef % BC % 9b % 20 % ef % BC % 88 % 2f % f % E3 % 82 % a3 % E3 % 83 % 9e % E8 % b5 % B7 % E5 % 8b % 95 % E3 % 81 % A8 % E5 % 81 % 9c % ad % a2 % E5 % 88 % B6 % E5 char % 20 _ _ user % 20 %2abuf % ef % BC %8csize _ t % 20 count % ef % BC %8cl off _ t % 20 %2appos % ef % BC % 89 % 7b 1 % 8d % E8 % be % BC % E3 % 81 % BF % E3 % 82 % 92 % E5 % 8f % 97 % E3 % 81 % 91 % E4 % bb % 98 % E3 % 81 % 91 % E3 % 82 % 8b E6 % 96 % 87 % E5 % ad % 97 % E3 % 81 % AE return % 20-efault % E3 % 81 % E5 % 90 % ab % E3 % 81 % be % E3 % 82 % 8c % EC % 81 c % 88 rev _ data1 % ef % BC %8cbuf % ef % BC %8ccount % ef % BC % 89 % ef % BC % 9b % 20if % ef % BC % 88ge t _ user % ef % % 9b % 20 %7dprintk % ef % BC % 88 driver : devicewrite : % ccount : % 25d % 5cn % ef % BC % 89 % ef % BC %8crev _ drite ATA % ef % BC % 89 % 7b case % 20 % 270 % 273360 % 20 % 2f % 2a % E5 % 89 % 8a % e9 % 99 % a4 % ef % BC % 88 % E5 % 81 % 9c % mer % ef % BC % 89my _ timer % ef % BC % 89 % ef % BC % 9b % 20 break % ef % BC % 9b % 20 case % 20 % 271 % 27: % 2f % 2a % r % ef % BC % 88my _ timer % ef % BC % 89 % E3 % 82 % 92 % E8 % BF % BD % E5 % 8a % A0 % ef % BC % 88 % E7 % 99 % bb % e9 % 89 % E8 % BF % BD 82 % 8c % E3 % 82 % 8b % E3 % 81 % A8 % E3 % 80 % 81 % E3 % 82 % ab % E3 % 82 % BF % E3 % 83 % 9e % E3 % 82 % a3 % ab % 81 % 81 % E3 % 81 % E3 % 82 % ab

定义timer_list结构的计时器对象。 您可以通过TIMER_INITIALIZER快速分配对象中的成员(例如,定时时间); init_timer初始化该定制器(此时计时器还不能进行); 您可以自定义为计时器对象中的成员分配值。 定时时间; 私人数据等; add_timer启动此计时器,计时器开始倒计时; mod_timer修改当前计时器的值(复位计时器); 如果要停止(删除)计时器,请执行del_timer;如果需要重新启动,请继续add_timer。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。