在中断函数中设置定时时间:

static irqreturn_t key_interrupt(int irq, void *dev_id)
{mod_timer(&key.timer, jiffies + msecs_to_jiffies(3000));printk("in the interrupt !\r\n");return IRQ_HANDLED;}

在定时器函数中增加相关打印:

static void key_timer_function(struct timer_list *arg)
{static int last_val = 1;unsigned long flags;int current_val;spin_lock_irqsave(&key.spinlock, flags);printk("timer function start ! \n");current_val = gpio_get_value(key.key_gpio);if(0 == current_val && last_val){printk("status = KEY_PRESS[%d] ! \n", current_val);status = KEY_PRESS;}else if(1 == current_val && ! last_val){printk("status = KEY_RELEASE[%d] ! \n", current_val);status = KEY_RELEASE;}else{printk("status = KEY_KEEP[%d] ! \n", current_val);status = KEY_KEEP;}last_val = current_val;printk("timer function end[%d] ! \n", current_val);spin_unlock_irqrestore(&key.spinlock, flags);
}

在内核中加载模块时,发现:

中断先执行:

in the interrupt !
in the interrupt !

然后3秒后会进到定时器函数执行:

timer function start !
status = KEY_KEEP[1] !
timer function end[1] !

推测:定时器执行是先延时设置的时间,然后再执行定时器的函数,以此往复

linux定时器原理相关推荐

  1. Linux·定时器原理与使用

    目录 定时器的实现原理 内核启动注册时钟中断 内核时钟中断处理流程 内核定时器时间轮算法 定时器的使用方法 一个基于时间轮的定时器简单实现 定时器的实现原理 定时器的实现依赖的是CPU时钟中断,时钟中 ...

  2. 让事件飞——Linux eventfd 原理

    让事件飞--Linux eventfd 原理 让事件飞 --Linux eventfd 原理与实践 原文作者:杨阳 eventfd/timerfd 简介 目前越来越多的应用程序采用事件驱动的方式实现功 ...

  3. Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)

    Linux定时器:无节拍机制tickless(CONFIG_NO_HZ) BAT-Battle 2013-09-01 Tickless 机制是Linux 内核中引入的新定时机制 以前,Linux内核会 ...

  4. linux软中断是什么机制,Linux软中断原理浅析

    Linux软中断原理浅析 Linux软中断原理浅析 Linux中的软中断机制用于中对时间要求最严格以及最重要的中断下半部进行使用.在系统设计过 程中,大家都清楚中断上下文不能处理太多的事情,需要快速的 ...

  5. Linux串口原理与编程

    Linux 串口原理 2. How the Hardware Transfers Bytes     mit这里说得巨清楚,串口相关原理的看这个就行,CPU和MCU串口接收差不多. When the ...

  6. linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc

    linux定时器和Jiffies汇 1.linux HZ Linux核心几个重要跟时间有关的名词或变数,将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer int ...

  7. Linux 操作系统原理 — 内存 — 内存分配算法

    目录 文章目录 目录 前文列表 内存碎片 伙伴(Buddy)分配算法 Slab 算法 虚拟内存的分配 内核态内存分配 vmalloc 函数 kmalloc 用户态内存分配 malloc 申请内存 用户 ...

  8. Linux 操作系统原理 — 内存 — 基于局部性原理实现的内/外存交换技术

    目录 文章目录 目录 前文列表 基于局部性原理实现的内-外存交换技术 局部性原理 Swap 交换分区 前文列表 <Linux 操作系统原理 - 内存 - 物理存储器与虚拟存储器> < ...

  9. Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理

    目录 文章目录 目录 前文列表 页式管理 快表 多级页表 基于页表的虚实地址转换原理 应用 TLB 快表提升虚实地址转换速度 页式虚拟存储器工作的全过程 缺页中断 为什么 Linux 默认页大小是 4 ...

  10. Linux 操作系统原理 — 内存 — 基于 MMU 硬件单元的虚/实地址映射技术

    目录 文章目录 目录 前文列表 物理地址与虚拟地址 内存空间的组织方式 虚拟地址空间的编址 内核态地址空间 用户态地址空间 内-外存空间的交换与虚拟存储空间之间的映射关系 缺页异常 前文列表 < ...

最新文章

  1. html文件girlfriend,index.html
  2. 解读容器的 2020:寻找云原生的下一站
  3. Java基础 集合(Collection)结构详解 Collection和Collections的区别
  4. asp.net core集成CAP(分布式事务总线)
  5. java 打印三维数组_Java基础第三天_数组
  6. Mongodb简介及基本操作
  7. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  8. 荣耀50 Pro+配置参数曝光:AMOLED高刷屏+骁龙888旗舰芯片
  9. php-java-bridge 作用_PHP-Java-Bridge的使用(平安银行支付功能专版)
  10. Pazera Free MP4 To MP3 Converter 1.6 中文64位+32位便携版,免费的视频转换器
  11. 互联网晚报 |10/13 | 腾讯地图PC端将停止服务;国际货币基金组织下调全球经济增长预期至2.7%;保时捷菜刀售价1700元...
  12. html页面 关键字高亮,HTML高亮关键字的完美解决方案
  13. go、JS AES(CBC模式)加密解密兼容
  14. cgb2107-day08
  15. laravel8 使用高德地图查询经纬度(输入地名获取经纬度)
  16. 力扣 378. 有序矩阵中第 K 小的元素
  17. java geometry mysql_java程序操作Geometry对象
  18. php写类,php 类的写法
  19. fan类java_(Fan类)(Fan class)
  20. 给自己的博客园装饰萌萝莉(live2d)

热门文章

  1. matlab仿真整流电路设计,基于Matlab GUI的整流电路仿真设计[图]
  2. C++实现求解逻辑表达式的真值表、主析取范式、主合取范式
  3. 弱监督学习--半监督学习(1):Temporal Ensembling for Semi-Supervised Learning
  4. 一年Java的阿里电话面试全纪录
  5. 2021雪花飘新年倒计时源码
  6. spring-quartz表达式介绍
  7. Flash 短片轻松学
  8. 集成运算放大器及其应用
  9. 模拟电路——集成运算放大器(1)
  10. 如何制作DUN-14条形码