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

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);毫秒延时函数
 *********************************************************/

相关推荐

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

    2024-04-24 09:10:01       33 阅读
  2. Linux嵌入式驱动开发-内核定时器

    2024-04-24 09:10:01       34 阅读
  3. Linux内核驱动开发-001字符设备开发-002led杂项驱动

    2024-04-24 09:10:01       28 阅读
  4. Linux内核驱动开发-001字符设备开发-001Led驱动

    2024-04-24 09:10:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 09:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 09:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 09:10:01       82 阅读
  4. Python语言-面向对象

    2024-04-24 09:10:01       91 阅读

热门阅读

  1. c#版本LabelMe标注辅助工具源码

    2024-04-24 09:10:01       33 阅读
  2. [SP10606] BALNUM - Balanced Numbers 解题记录

    2024-04-24 09:10:01       36 阅读
  3. 算法题解记录21+++打家劫舍(百日筑基)

    2024-04-24 09:10:01       33 阅读
  4. kafak知识总结(2)

    2024-04-24 09:10:01       33 阅读
  5. 对React-Fiber的理解,它解决了什么问题?

    2024-04-24 09:10:01       37 阅读
  6. 网站安全方案

    2024-04-24 09:10:01       27 阅读
  7. 阿里云域名动态解析

    2024-04-24 09:10:01       32 阅读
  8. 使用python写一个井字棋窗口小游戏

    2024-04-24 09:10:01       33 阅读