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

1驱动程序

c 复制代码
/*************************************************************************
	> 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);毫秒延时函数
 *********************************************************/
相关推荐
A星空1237 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
春日见9 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
Forsete1 天前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机
JMchen1232 天前
AI编程与软件工程的学科融合:构建新一代智能驱动开发方法学
驱动开发·python·软件工程·ai编程
南烟斋..2 天前
Linux设备驱动开发完全指南:从启动流程到Platform驱动模型
linux·驱动开发·uboot
范纹杉想快点毕业2 天前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
yugi9878382 天前
RN8302B电表芯片驱动开发指南(基于SPI通信)
驱动开发·单片机·嵌入式硬件
2301_772204282 天前
Linux 驱动开发:杂项设备驱动与自动设备号管理
linux·运维·驱动开发
嵌入式-老费3 天前
Linux Camera驱动开发(用树莓派学习camera驱动)
驱动开发
松涛和鸣3 天前
70、IMX6ULL LED驱动实战
linux·数据库·驱动开发·postgresql·sqlserver