Linux c ——定时计数
来源:互联网 发布:如何提高淘宝店铺权重 编辑:程序博客网 时间:2024/06/14 03:18
系统的定时器频率(节拍率)是通过静态预处理器定义的,也就是HZ,HZ是变化的,连续两次时钟的间隔时间就叫做节拍,为1/HZ秒,高HZ有利于提高函数的运行精度,有利于提高抢占的准确度,有利于获得更精细的解析度,但是会减少其他处理器工作的时间,会更频繁的扰乱处理器的高速缓存,增加耗电。
全局变量jiffies用来记录自系统启动以来产生的节拍总数,jiffies在一秒内增加的值就是HZ。
extern unsigned long volatile jiffies; //定义Jiffies
unsigned long later = jiffies + 5 * HZ //从现在开始5s
1)jiffies类型为unsigned long,内核时间管理代码使用整个64位的jiffies_64,而jiffies仅是读取jiffies_64的低32位。
2)C编译器通常只将变量装载一次,关键词volatile将编译器在每次访问变量时都重新从主内存中获取,而不是通过寄存器的变量别名来访问。
Jiffies回绕:节拍数达到最大值之后还要继续增加的话,jiffies从0开始计数。
内核提供四种宏来解决jiffies回绕问题,即time_after、time_before、time_after_eq、time_before_eq.
体系结构提供两种设备进行计时——系统定时器和实时时钟。系统定时器提供一种周期性触发中断机制,实时时钟最主要的作用是在启动时初始化墙上的时间(实际时间)xtime变量。
4.2 动态定时器的使用
Struct time_list my_timer; //创建定时器
Init_timer(&my_timer); //初始化定时器
my_timer.expires = jiffies + delay; //填充超时时间
my_timer.data = 0; //填充超时处理函数void my_function(unsigned
long data )形参
my_timer.function = my_function; //填充超时处理函数
add_timer(&my_timer); //激活定时器
mod_timer(&my_timer,jiffies+new_delay); //修改新的定时时间并激活
del_timer_sync(&my_timer); //删除定时
说明:
动态定时器不是周期运行,它在超时后就自动撤销,所以不需要为已经超时的定时器调用删除函数,删除定时器时需要等待可能在其他处理器上运行的定时器处理程序都退出,所以要使用del_timer_sync,而del_timer只能保证定时器不再被激活,这种定时器不能完全保证实时,不能用这种定时器实现任何硬实时任务。
- Linux c ——定时计数
- [Linux驱动入门]定时计数
- 单片机C简单定时计数组件
- linux Crontab—定时任务
- 电脑定时关机—— c 语言
- C语言小程序—定时关机
- C++——std::string类的引用计数
- My insight C++——C++中的隐式计数
- C++——std::string类的引用计数
- Objective-C内存管理详解——引用计数
- linux定时任务命令——crontab
- Linux学习——crontab定时任务
- Linux——延时与定时
- T0定时、T1计数,协作定时
- 单片机 计数/定时 中断实验
- 单片机定时/计数工作方式
- more effective c++——Item M29 引用计数(三)带引用计数的基类的实现
- 计数排序—Java
- mosquitto源码分析(三)
- <c:forEach varStatus="status">中 varStatus的属性简介
- 数据结构(二)--------队列
- mosquitto源码分析(四)
- Python 网络爬虫 008 (编程) 通过ID索引号遍历目标网页里链接的所有网页
- Linux c ——定时计数
- 关于solr schema.xml 和solrconfig.xml的解释
- HDU 1754 I Hate It
- uva 10258Contest Scoreboard
- Https完全协议详解
- CentOS7 添加自定义系统服务案例
- Handler消息机制
- 关于solr schema.xml 和solrconfig.xml的解释
- cat: can't open '/lib/modules/2.6.35.3-571-gcca29a0/modules.dep': No such file or directory