linux2.4.18内核定时器的使用

发布者:breakthrough2最新更新时间:2024-07-24 来源: elecfans关键字:linux2  内核  定时器 手机看文章 扫描二维码
随时随地手机看文章

我的内核是2.4.18的。Linux的内核中定义了一个定时器的结构:

#include

struct timer_list

{

    struct list_head list;

unsigned long expires; //定时器到期时间

unsigned long data; //作为参数被传入定时器处理函数

void (*function)(unsigned long);

};

利用这个结构我们可以在驱动中很方便的使用定时器。

一: timerAPI函数:

          初始化定时器:

               void init_timer(struct timer_list * timer);

增加定时器:

void add_timer(struct timer_list * timer);

删除定时器:

int del_timer(struct timer_list * timer);

修改定时器的expire

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

 二:使用定时器的一般流程为:

1)创建timer、编写超时定时器处理函数function

2)为timerexpiresdatafunction赋值;

3)调用add_timertimer加入列表;

4)在定时器到期时,function被执行;

5)在程序中涉及timer控制的地方适当地调用del_timermod_timer删除timer或修改timerexpires

三:一个简单的实例(timer.c)

/****************************************

作者:蔡肖飞                            *

时间:2008年11月27日            *

名称:timer.c                          *

说明:本程序用于学习linux内核 *

中定时器的基本使用               *

*****************************************/

#include

#include

#include

#include //jiffies在此头文件中定义

#include

#include

struct timer_list mytimer;//定义一个定时器

void mytimer_ok(unsigned long arg)

{

           printk('Mytimer is okn');

           printk('receive data from timer: %dn',arg);

   }

 

static int __init hello_init (void)

{

    printk('hello,worldn');

    init_timer(&mytimer);     //初始化定时器

    mytimer.expires = jiffies+100;//设定超时时间,100代表1

    mytimer.data = 250;    //传递给定时器超时函数的值

    mytimer.function = mytimer_ok;//设置定时器超时函数

    add_timer(&mytimer); //添加定时器,定时器开始生效

    return 0;

}

   

static void __exit hello_exit (void)

 

{

    del_timer(&mytimer);//卸载模块时,删除定时器

    printk('Hello module exitn');

}

 

module_init(hello_init);

module_exit(hello_exit);

MODULE_AUTHOR('CXF');

MODULE_LICENSE('Dual BSD/GPL');

四:交叉编译后,放到开发板上:

#insmod timer.o

可以发现过一秒后定时器过期函数被执行了,打印出了信息,250也被正确传递

了,呵呵!

#rmmod timer

实验完成。

五:进一步理解定时器:

      在上面的定时器超时函数mytimer_ok(unsigned long arg)中,添加如下

代码:

mytimer.expires = jiffies+100;//设定超时时间,100代表1

mytimer.function = mytimer_ok;//设置定时器超时函数

add_timer(&mytimer); //添加定时器,定时器开始生效

交叉编译后,放到开发板上

#insmod timer.o

发现每隔一秒,mytimer_ok函数就执行一次,这是因为每次定时器到期后,都

又重新给它设置了一个新的超时时间,并且新的超时函数指向自己,形成一个递

归,所以就会一直执行下去。

#rmmod timer

可以卸载模块,当然打印也就结束了,注意因为定时器超时函数不停的打印信息

,导致输入上面的命令时会被定时器超时函数不停的打印信息淹没,不用管他,

耐心的把上面的命令输完就可以成功卸载。


关键字:linux2  内核  定时器 引用地址:linux2.4.18内核定时器的使用

上一篇:内核移植和文件系统制作(4):UBIFS根文件系统制作总结
下一篇:FL2440驱动添加(4)LED 驱动添加

推荐阅读最新更新时间:2024-11-21 19:45

泰坦KS众筹破30万美金 领跑2018水下无人机全球市场
要说什么是2018年科技圈的最热话题,水下无人机当属其中之一。自深圳明星企业大疆成为全球无人机第一品牌起,水下无人机这一片蓝海市场便已成为不少创业团队和明星资本的厮杀战场。   深圳市吉影科技有限公司自主研发生产的水下无人机 泰坦 ,是集多项黑科技成果的旗舰产品。自登陆海外权威 众筹 平台 KICKSTARTER 起,便收获大量全球粉丝的贡献支持。在水人无人机市场愈演愈热的2018年,在同期几款同品类产品中达到30万美金,实属不易,也是深企创新力和生命力的最佳佐证。   水下无人机泰坦众筹总额已破30万美金   海洋娱乐成消费新场景,无人机也“闹海” 在“一带一路”政策的发展和带动下,海洋资源开发已经被列入国家发展的重要战略部
[嵌入式]
工研院:特朗普禁令博通并高通4大层面看仔细
美国总统川普命令禁止博通购并高通,工研院产业经济与趋势研究中心(IEK)主任室计划副组长杨瑞临今天说,其中变化要从川普决策、博通、高通及外部多方角力层面分析,但结果来说对台厂是好事。 川普(Donald Trump)以国家安全为由,发布命令禁止博通(Broadcom)购并高通(Qualcomm)。 高通已回绝博通以 1,170 亿美元的购并提案。 杨瑞临告诉记者,不意外川普决策,只是没想到结果这么快。 从川普决策看,川普以提高就业与重视国家安全为主轴,去年 12 月底取消网络中立化法案,让电信营运商可操作多元化商业模式和服务内容,以提高就业机会,加速电信营运商在 5G 布局。 他说,川普也强调要透过国家力量建设 5G 网络,如果未
[半导体设计/制造]
基于Linux的温度传感器DS18B20驱动程序设计
 引言  传统的模拟温度测量抗干扰能力差,放大电路零点漂移大,导致测量值误差大,难以达到所需精度。在实际应用中,采用抗干扰能力强的数字温度传感器是解决上述问题的有效办法。   DS18B20是Dallas公司生产的数字温度传感器,具有体积小、适用电压宽、经济灵活的特点。它内部使用了onboard专利技术,全部传感元件及转换电路集成在一个形如三极管的集成电路内。DS18B20有电源线、地线及数据线3根引脚线,工作电压范围为3~5.5 V,支持单总线接口。   准确的温度测量是很多嵌入式系统中重要的一点。在Linux操作系统下使用数字温度传感器DS18B20,不仅可以得到高精度的温度测量值,而且硬件简单可靠。   1Linux的
[工业控制]
基于Linux的温度传感器DS<font color='red'>18</font>B20驱动程序设计
STM32F4_SYSTICK定时器
关于SYSTICK定时器的说明,在STM32F4的参考手册中并没有提到,因为这个定时器是属于Cortex内核的内容。在《Cortex M3权威指南》中,可以在第八章,也即“NVIC与中断控制”那一章节的最后才可看到其详细说明,摘取如下。 //-----------------------------------------------------------------------------------------------------------// SysTick定时器被捆绑在NVIC中,用
[单片机]
STM32F<font color='red'>4</font>_SYSTICK<font color='red'>定时器</font>
低迷过后步入恢复期 解锁2018年电视产品5大关键词
在2017年,彩电市场普遍呈现低迷态势,面板涨价对上半年影响较大,虽然下半年渐渐走出了阴霾,但总体来看彩电市场依旧不尽如人意。在告别了2017年后,彩电产品在2018年将会呈现什么样的趋势呢?笔者通过几个关键词告诉大家。    关键词一:大屏化   在《2017年中国电视消费及2018趋势预测报告》中表示,在2017年,消费者在更换电视时最希望的尺寸主要在50-60英寸的范围之内。据中怡康数据显示,距离我们最近的双11、双12电商促销节中,大尺寸电视的销量占比有所上升,其中55吋英寸电视销量占比较大。消费水平的升级促进了消费者购买力的增强,也让消费者对于高品质生活的要求进一步提升。   目前京东方在合肥建设的10.5代线已提
[家用电子]
华硕电竞NB出货拼年增18%
电竞市场看俏,估计年产值高达130亿美元(约新台币4,100亿元),华硕双管齐下,积极拉拢游戏开发商与玩家,今年大手笔赞助电竞界年度盛事「暴雪嘉年华」(BlizzCon 2016),目标全年电竞笔电出货量挑战130万台,比去年约110万台成长超过18%,稳居龙头宝座。 4日登场的「暴雪嘉年华」是全球最重要电竞比赛之一,由美国知名游戏公司Blizzard(暴雪娱乐)举办,旗下包括魔兽世界、星海争霸3、暴雪英霸等多款畅销游戏,世界杯联赛总冠军战同步举行。各单项赛事奖金高达25万至100万美元,合计总奖金更超过新台币1亿元(325万美元),吸引各国电竞高手齐聚争夺冠军王位与高额奖金。 玩家更趋之若鹜,BlizzCon门票售价虽达约新台币
[家用电子]
STM32CubeMX系列教程3:基本定时器
这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击 打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟。 定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。 从上图我们可以看到,基本定时器主要由下面三个寄存器组成。 计数器寄存器 (TIMx_CNT) 预分频器寄存器 (TIMx_PSC) 自动重载寄存器 (TIMx_ARR) 计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二
[单片机]
STM32CubeMX系列教程3:基本<font color='red'>定时器</font>
CES 2018:能操控的机器人来了 人机合一
  你是不是梦想拥有一个可以手动操控的机器人呢,随着科学技术的发展,这样的事情恐怕不止想想那么简单了。   在本届CES展会上,一家名为Furrion公司就展示这样的机器人,当然需要你亲自坐进机器人舱内,然后手动进行操作,颇有人机合一的感觉。      跟随你的操控,这个机器人(你把它看作是机器骨骼也行)能够根据你的操作流畅的运动,其身高达到了4.5米,重量是3.6吨。   据悉,这台机器人充满电能加持一个小时,最高时速可以达到32公里,并且能够跨越障碍物,真是科技感十足啊。   
[机器人]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved