linux内核定时器(八)

1、系统定时器高频和低频的优缺点

a)高节拍率会提高系统时间精度,如果采用 100Hz的节拍率,时间精度就是 10ms,采用
1000Hz的话时间精度就是 1ms,精度提高了 10倍。高精度时钟的好处有很多,对于那些对时
间要求严格的函数来说,能够以更高的精度运行,时间测量也更加准确。

b)高节拍率会导致中断的产生更加频繁,频繁的中断会加剧系统的负担, 1000Hz和 100Hz的系统节拍率相比,系统要花费 10倍的“精力”去处理中断。中断服务函数占用处理器的时间
增加,但是现在的处理器性能都很强大,所以采用 1000Hz的系统节拍率并不会增加太大的负
载压力。根据自己的实际情况,选择合适的系统节拍率,本教程我们全部采用默认的

2、jiffies

        Linux内核使用全局变量 jiffies来记 录系统从启动以来的系统节拍数,系统启动的时候会
将 jiffies初始化为 0

        假如HZ 为最大值1000 的时候,32 位的jiffies 只需要49.7 天就发生了绕回,对于64 位的jiffies 来说大概需要5.8 亿年才能绕回,因此jiffies_64 的绕回忽略不计。

3、转换函数

4、定时器函数

a)初始化定时器

void init_timer(struct timer_list *timer)

b)函数用于向 Linux内核注册定时器,使用

void add_timer(struct timer_list *timer)

c)删除定时器

int del_timer(struct timer_list * timer)

 d)函数的同步版,会等待其他处理器使用完定时器再删除,

int del_timer_sync(struct timer_list *timer)

e)函数用于修改定时值,如果定时器还没有激活的话,

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

5、延时函数

6、源代码

#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/gpio.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_gpio.h>
#include <linux/semaphore.h>
#include <linux/timer.h>
#include <asm/mach/map.h>
#include <asm/uaccess.h>
#include <asm/io.h>

struct timer_list timer;

void timer_function( int arg )
{
    printk( KERN_ALERT "arg = %d\n", arg);
    //如果周期执行,则需要每次调用该函数
    //mod_timer(&timer, jiffies + msecs_to_jiffies(2000));
 }


static int __init timer_init(void)
{
	int times = 5000;
	init_timer(&timer);
    timer.function = timer_function;                   //定时器中断响应函数
    timer.data = times;                                //传递给timer_function的参数
	timer.expires = jiffies + msecs_to_jiffies(2000);  //定时周期
	add_timer(&timer);    
	return 0;
}

static void __exit timer_exit(void)
{
	del_timer_sync(&timer);
}

module_init(timer_init);
module_exit(timer_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ddd");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值