Linux内核驱动开发-006内核定时器

server/2024/9/23 9:31:19/

1驱动程序

/*************************************************************************> File Name: timer.c> Author: yas> Mail: rage_yas@hotmail.com> Created Time: 2024年04月23日 星期二 19时20分42秒************************************************************************/#if 1
/*=========================The timer driver=========================*//*==========头文件包含==========*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>/*==========驱动函数声明==========*/
static int __init timer_driver_init(void);
static void __exit timer_driver_exit(void);static void timer_out(unsigned long n);/*==========全局变量==========*//* 1 定义内核定时器*/
static struct timer_list timer;/*******************************************************************************
* 函 数 名	: timer_out
* 函数功能	: 
* 输    入  : 							
* 输    出  :
*******************************************************************************/
static void timer_out(unsigned long n)
{printk("%lu\n",n);//timer.data = jiffies;/*修改定时器的超时时间*/mod_timer(&timer,jiffies+3*HZ);//【目标定时器】【新的到期时间】
}/*******************************************************************************
* 函 数 名	: timer_driver_init
* 函数功能	: 
* 输    入  : 							
* 输    出  :
*******************************************************************************/
static int __init timer_driver_init(void)
{/* 2 初始化内核定时器*/init_timer(&timer);/* 3个定时器成员变量初始化*/timer.function=timer_out;//回调函数,定时期满需要执行的代码timer.expires=jiffies+3*HZ;//定时期满=节拍初值+节拍增量(时间*节拍频率)timer.data=jiffies;//function成员的参数/* 3 启动定时器*/add_timer(&timer);return 0;
}/*******************************************************************************
* 函 数 名	: timer_driver_exit
* 函数功能	: 
* 输    入  : 							
* 输    出  :
*******************************************************************************/
static void __exit timer_driver_exit(void)
{del_timer(&timer);//删除定时器
}module_init(timer_driver_init);
module_exit(timer_driver_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("XXX");
/*=========================The timer driver=========================*/
#endif/*=========================定时器========================*/
/* 1 基本概念:*  [HZ]: 计数频率 - 每秒几个节拍 - [include/asm-generic/param.h]*  [jiffies]: 本质上就是一个计数器,从系统启动开始计数,计数的周期系统默认配置为[1/200]*  所以定时精度是5ms* 2 定时原理:*  启动内核定时器后,从系统计数器当前状态开始,到达指定时间后,系统调用回调函数。* 3 补充:*  (1)提高[HZ]就可以获得更高的精度->高节拍率*  (2)高节拍率->中断频繁->不如不中断**  (3)linux的几个延时函数:*      void ndelay(unsigned long nsecs);纳秒延时函数*      void udelay(unsigned long usecs);微秒延时函数*      void mdelay(unsigned long mseces);毫秒延时函数*********************************************************/

http://www.ppmy.cn/server/11808.html

相关文章

[ LeetCode ] 题刷刷(Python)-第28题:找出字符串中第一个匹配项的下标

题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 示例 1&#xff1a; 输入&#xff1a;…

前端学习<四>JavaScript基础——44-键盘事件

鼠标的拖拽事件 拖拽的流程&#xff1a; &#xff08;1&#xff09;onmousedown&#xff1a;当鼠标在被拖拽元素上按下时&#xff0c;开始拖拽&#xff1b; &#xff08;2&#xff09;onmousemove&#xff1a;当鼠标移动时被拖拽元素跟随鼠标移动&#xff1b; &#xff08;…

路由引入,过滤实验

实验拓补图 实验目的&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 loopback口模拟业务网段 2、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4运行 OSPF&#xff0c;各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

FLAML框架学习干货整理

一、FLAML介绍 FLAML (Fast and Lightweight AutoML) 是一个用于自动机器学习&#xff08;AutoML&#xff09;的 Python 库&#xff0c;旨在快速且资源效率高地找到机器学习任务的最优模型和其超参数。它由微软研究院开发&#xff0c;适用于广泛的机器学习任务&#xff0c;如分…

VUE-列表

VUE-列表 列表功能 如下例子 列表展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

AUTOSAR-COMStack-003_SignalGroup如何发送接收

1. Ref Ref.1 AUTOSAR_RS_Main.pdf Ref.1 AUTOSAR_RS_Features.pdf Ref.2 AUTOSAR_SRS_COM.pdf Ref.3 AUTOSAR_SWS_COM.pdf 2. 为什么要使用Signal Group&#xff1f; 2.1 Traceabilty [RS_PO_00004] AUTOSAR shall define an open architecture for automotive software.…

python基本语法与使用

Python是一种高级编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括Web开发、数据科学、人工智能等。以下是Python的基本语法和使用方法&#xff1a; 1.注释 使用#来添加单行注释&#xff0c;多行注释可以使用或"""来包围。 # 这是一个单行注释…

Mac 安装pnpm报错

npm install -g pnpm 报错截图&#xff1a; 报错原因&#xff1a;权限 解决方法&#xff1a;sudo npm install -g pnpm --allow-root 输入密码即可