【Linux驱动层】iTOP-RK3568学习之路(六):定时器

embedded/2024/9/23 9:26:55/

一、函数定义


Linux 内核中使用 timer_list 结构体表示内核定时器:

struct timer_list {struct hlist_node entry;unsigned long expires;					/* 定时器超时时间,单位是节拍数 */void (*function)(struct timer_list *);	/* 定时处理函数 */u32 flags;.......
};

定义和初始化:

DEFINE_TIMER(timer,function_name);			//定义一个定时器

向 Linux 内核注册定时器,使用 add_timer 函数 向内核注册定时器以后,定时器就会开始运行

void add_timer(struct timer_list *timer) 

删除一个定时器

int del_timer(struct timer_list * timer) 

修改定时值,如果定时器还没有激活的话,mod_timer 函数会激活定时器

int mod_timer(struct timer_list *timer,unsigned long expires)

可以使用以下命令进行 3 秒钟的定时:

timer_test.expires = jiffies_64 +msecs_to_jiffies(3000)		// 定时时间 = 当前时间 + 延时时间(3秒)

二、实例代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>static void function_test(struct timer_list *t);	//定义 function_test 定时功能函数
DEFINE_TIMER(timer_test,function_test);		//定义一个定时器static void function_test(struct timer_list *t)
{printk("this is function test \n");mod_timer(&timer_test,jiffies_64 + msecs_to_jiffies(5000));//使用 mod_timer 函数将定时时间设置为五秒后
}static int __init timer_mod_init(void) //驱动入口函数
{timer_test.expires = jiffies_64 + msecs_to_jiffies(5000);//将定时时间设置为五秒后add_timer(&timer_test);		//添加一个定时器return 0;
}static void __exit timer_mod_exit(void) //驱动出口函数
{del_timer(&timer_test);		//删除一个定时器printk("module exit \n");
}module_init(timer_mod_init);
module_exit(timer_mod_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("topeet");




http://www.ppmy.cn/embedded/30289.html

相关文章

挑战一周完成Vue3项目Day4: 用户管理+角色管理+菜单管理+首页+暗黑模式/主题切换

一、用户管理 1.静态搭建 src/views/acl/user/index.vue <template><el-card style"height:80px;"><el-form :inline"true" class"form"><el-form-item label"用户名&#xff1a;"><el-input placehold…

如何在前端展示后端返回的pdf Base64格式字符串

文章目录 如何在前端展示后端返回的pdf Base64格式字符串 如何在前端展示后端返回的pdf Base64格式字符串 // fileBase64 就是后端返回的 pdf Base64格式字符串getPdfDocument(fileBase64) {let fileBlob this.base64ToBlobsdf(fileBase64,application/pdf);let basePdfUrl …

【Python】深入理解Pandas中的连续变量与分类变量以提升模型训练效果

你啊你&#xff0c;是自在如风的少年 飞在天地间&#xff0c;比梦还遥远 你啊你&#xff0c;飞过了流转的时间 归来的时候&#xff0c;是否还有青春的容颜 &#x1f3b5; 好妹妹《你飞到城市另一边》 引言&#xff1a; 在使用Python进行数据科学和机器学…

【C++ | 运算符】介绍运算符的分类、求值顺序、优先级、结合律

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-02 1…

数据库|TiDB-Server API的高效应用指南

一、API介绍 1.Status 显示TiDB 连接数、版本和git_hash 信息 tidb-server_ip:status_port/status { "connections": 0, "version": "5.7.25-TiDB-v6.1.1", "git_hash": "5263a0abda61f102122735049fd0dfadc7b7f822" } 2.St…

使用通义千问,为汽车软件需求生成测试用例

前几篇文章我们介绍了,分析需求,生成代码,生成流程图,序列图等汽车软件开发设计中的常见工作步骤,今天我们讲下汽车软件测试中怎么使用大模型,如何用千问生成用例,具体操作步骤如下: 提示词: 车速自动闭锁 使能条件(a&b&c&d&e&f) a. 电源状态…

golang 的原子操作

1. 原子操作的定义 原子操作是在并发编程中用于确保操作的原子性和线程安全性的操作。原子操作是不可中断的、不可分割的操作&#xff0c;要么完全执行&#xff0c;要么完全不执行。 在多线程或并发环境中&#xff0c;多个线程可能同时访问和修改共享的数据或变量。这种并发访…

react函数式组件每次setstate内部变量重新赋值问题

react函数式组件每次setstate内部变量重新赋值问题 背景解决办法 背景 react函数式组件每次setstate内部变量重新初始化赋值问题&#xff0c;导致不能够对变量正常赋值和读值。 const App: FC ({ }) > {let a:string 0const [status, setStatus] useState<string>…