【Linux驱动】内核定时器控制 LED 闪烁

本文介绍了Linux内核中的定时器机制,包括节拍数、jiffies计时、定时器数据结构以及如何使用内核API进行定时器的初始化、注册、修改和删除。同时展示了如何利用定时器控制LED灯状态,以及通过ioctl接口进行延时操作。

Linux 提供了定时器,当超过预定时间时,就会触发回调函数,此外,Linux内核还提供了短延时函数,比如微秒、纳秒、毫秒延时函数。

一、内核定时器API

1、节拍数

内核定时器是通过节拍数来计时的,节拍数与时间存在关联性,在 include/asm-generic/param.h  中定义了一秒会产生多少次节拍数。由图中可知,当前系统一秒产生的节拍数为 100 次。

知道了节拍数的概念,接下来就不得不提一下全局变量 jiffies 了,jiffies 定义在文件 linux/jiffies.h 中,用于记录系统从启动以来的系统节拍数,类似于时间戳。由此可知定时器延时的基本原理,假设当前 jiffies = 1000,我们要延时2s(200次节拍),当 jiffies = 1000 + 200 时,说明定时的时间到了,此时就会执行相应的回调函数。

注意:jiffies既然是变量,那必然存在溢出的风险,溢出以后会 jiffies 重新从 0 开始计数

2、定时器数据结构

Linux内核提供了 struct timer_list 类型来表示定时器,timer_list 定义在文件 linux/timer.h 中。

struct timer_list {
	struct list_head entry;
	unsigned long expires;            // 超时时间(单位: 节拍数)
	struct tvec_base 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值