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

embedded/2024/9/22 22:09:44/

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/embedded/18844.html

相关文章

组合模式(Composite)

组合模式(Composite) 文章目录 组合模式(Composite)什么是组合模式通过示例了解组合模式 什么是组合模式 组合模式(Composite),将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象 的使用具有一致性 Component:组合中的对象声明接口&#x…

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式&#xff1a; 直接使用allure.title为测试用例自定义标题&#xff1b;allure.title支持通过占位符的方式传递参数&#xff0c;可以实现测试用例标题参数化&a…

第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4:将 CGI 模块与 NSD 结合使用

文章目录 第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4&#xff1a;将 CGI 模块与 NSD 结合使用替代选项 4&#xff1a;将 CGI 模块与 NSD 结合使用 (nph-CSPcgi*.exe)启用 CGI 模块 第六十二章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 4&#xff…

Centos7.9系统MySQL5.7.32升级为5.7.44(生成环境操作)

1.背景 由于客户进行等保漏扫和渗透&#xff0c;生成环境mysql数据库被扫描出了 高危漏洞。 如图&#xff1a;部分漏洞 查看漏洞详细信息&#xff0c;建议升级到指定版本解决&#xff1a; 说明&#xff1a; 本文仅适合使用当前数据库为 RPM 安装方式 2.升级前准备 查看环…

计算机网络——GBN协议实现

实验目的 编程模拟实现GBN可靠传输软件 实验内容 C 程序模拟实现Go-Back-N可靠数据传输&#xff0c;需要编写一个发送端程序和一个测试端程序来模拟传输过程 具体流程 1. 编写发送端程序&#xff0c;调用库实现socket连接&#xff0c;然后主要实现滑动窗口&#xff0c;接收…

使用 Dify 和 Moonshot API 构建你的 AI 工作流(一):让不 AI 的应用 AI 化

有了之前的文章铺垫&#xff0c;这篇文章开始&#xff0c;我们聊聊如何折腾 AI 工作流&#xff0c;把不 AI 的应用&#xff0c;“AI 起来”。 写在前面 上个月&#xff0c;我们聊过了《使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3》&#xff0c;里面介绍了如何使用交互…

Android Studio Iguana | 2023.2.1配置优化

一. 前言 本篇文章记录最新版本的Android Studio的配置优化&#xff0c;写这篇文章的是由于电脑中的AS工具更新版本覆盖安装后&#xff0c;AS会经常卡死&#xff0c;Debug的时候也经常莫名其妙的断掉&#xff0c;非常影响工作效率&#xff0c;所以重新把配置环境整理一下&#…

微信小程序关于主包大小不能超过1.5MB的问题

常规的解决办法有以下几种 1、把资源文件改成远程服务器的&#xff0c;比如png这些 2、进入如图的分析页面&#xff0c;能明确知道你哪个插件包太大&#xff0c;我这里之前echart的包就1mb&#xff0c;现在给他缩减到了500kb的样子 3、解决vant等npm包太大的问题&#xff0c…