Skip to content

LV010-定时器实例

一、定时器 demo

1. demo 源码

09_kernel_timer/01_timer_basic

2. 开发板验证

这个基本的定时器测试 demo 就是在驱动中直接打开的,我们使用以下命令加载驱动就会启动定时器:

shell
insmod sdriver_demo.ko

然后会看到以下打印信息:

image-20250208095416610

可以看到超时时间是 5s,基本上看内核日志的时间戳就可以知道每次打印间隔就是 5s。

二、app 控制定时器

app 怎么控制定时器?我们可以通过 ioctl 方法来实现,我们可以定义三个命令:

c
#define CMD_TIMER_SETPERIOD   (_IOW('T', 100, int)) /* 设置定时器周期命令 */
#define CMD_TIMER_OPEN        (_IO('T', 101))       /* 打开内核定时器 */
#define CMD_TIMER_CLOSE       (_IO('T', 102))       /* 关闭内核定时器 */

1. demo 源码

09_kernel_timer/02_timer_ctl

2. 开发板验证

我们执行以下命令,来验证效果:

shell
./app_demo.out /dev/sdevchr 4

然后们可以看到以下打印信息:

image-20250208101539520

可以看到打开定时器后,默认超时时间为 5s,之后改为 2 秒超时,每次打印间隔变成了 2s。

三、秒设备

我们来通过定时器定义一个秒设备。这个直接看 demo 吧:

09_kernel_timer/03_timer_dev

其实就是定义一个变量,再定义一个定时器,每秒让变量自增,应用再来读取。