内核延时函数接口
延时的函数有delay
和sleep
两种类型:
delay接口
void ndelay(unsigned long nsecs);//纳秒延时
void udelay(unsigned long usecs);//微妙延时
void mdelay(unsigned long msecs);//毫秒延时
sleep接口
void msleep(unsigned int msecs);//毫秒级延时
long msleep_interruptible(unsigned int msecs);//毫秒级延时,可被信号打断
void ssleep(unsigned int seconds);//秒级延时
delay和sleep的区别
delay
型延时:忙等待,占用CPU资源,延迟过程无法进行其他任务。
sleep
型延时:休眠,不占用CPU资源,其它模块此时可以使用CPU资源。
低分辨率定时器
jiffies和HZ
jiffies
:全局变量,表示 系统启动以来产生的节拍数 。每产生一次中断,jiffies
自动加一。
HZ
:赫兹,也叫 节拍率 ,表示 每秒种产生多少次中断 。
例如:HZ
为200
,代表每秒产生200
次中断,那2
秒钟jiffies
的值就应该是400
。因此系统的运行时间可以用jiffies/HZ表示。
一秒钟:jiffies
+ HZ
表示一秒钟
原因:内核中统计时间是通过jiffies,因此要比较时间或者定时也是通过jiffies。
例如程序运行一秒钟,内核如何知道运行了一秒?答案是运行一秒后的jiffies值和运行前的jiffies值进行比较,如果相差为一个HZ,则代表一秒钟。jiffies+HZ其实就是一秒后jiffies的值,所以jiffies+HZ可以间接表示一秒钟。
定时2秒:jiffies
+ 2*HZ
。以此类推
获取当前的jiffies
值,可以用get_jiffies_64()
函数。
将时间转为对应的jiffies
值,可以用msecs_to_jiffies()
等函数,例如msecs_to_jiffies(1000)
代表1秒,函数返回值其实就是HZ
。
相关接口
#include< linux/timer.h >
struct timer_list {
struct list_head list;
unsigned long expires; //定时器到期时间,传入的是jiffies值
unsigned long data; //作为参数被传入定时器处理函数
void (*function)(unsigned long);
};
void init_timer(struct timer_list * timer);//初始化定时器
void add_timer(struct timer_list * timer);//添加一个定时器
int mod_timer(struct timer_list *timer, unsigned long expires);//修改定时器的定时时间expires
int del_timer(struct timer_list * timer);//删除定时器
unsigned int jiffies_to_msecs (const unsigned long j);//将jiffies转为对应的毫秒值
unsigned int jiffies_to_usecs (const unsigned long j);//将jiffies转为对应的微秒值
unsigned long msecs_to_jiffies (const unsigned int m);//将毫秒值转为对应的jiffies
unsigned long usecs_to_jiffies (const unsigned int u);//将微秒值转为对应的jiffies
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内核
+关注
关注
3文章
1188浏览量
39612 -
接口
+关注
关注
30文章
6928浏览量
147290 -
Linux
+关注
关注
85文章
10263浏览量
205828 -
函数
+关注
关注
3文章
3248浏览量
60672
发布评论请先 登录
相关推荐
Linux的内核教程
LINUX内核版本的含义理解并掌握进程的概念掌握管道的概念及实现了解内核的数据结构了解LINUX内核的算法掌握LINUX内核升级的方法
发表于 04-10 16:59
•90次下载
Linux 内核数据结构:位图(Bitmap)
Linux内核还提供了位图接口。位图在Linux内核中大量使用。下面的源代码文件包含这些结构的通用接口。
发表于 05-14 17:24
•3011次阅读
嵌入式Linux内核的驱动程序开发是怎样的
linux内核的一部分,是操作系统内核和机器硬件之间的接口,它由一组函数和一些私有数据组成,是连接应用程序与具体硬件的桥梁。
发表于 11-06 11:33
•1170次阅读
最硬核的Linux内核文章
内核。 拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么? 02 什么是内核 内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以用户模式运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(
快速理解什么是Linux内核以及Linux内核的内容
Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。 拥有超过1300万行的代码,
Linux内核热补丁安全隐患的探索
Linux 内核热补丁可以修复正在运行的 linux 内核,是一种维持线上稳定性不可缺少的措施,现在比较常见的比如 kpatch 和 livepatch。内核热补丁可以修复内核中正在运行的函数,用已
Linux内核学习笔记:printk调试
内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。
发表于 06-01 15:14
•325次阅读
Linux内核模块参数传递与sysfs文件系统
Linux应用开发中,为使应用程序更加灵活地执行用户的预期功能,我们有时候会通过命令行传递一些参数到main函数中,使得代码逻辑可以依据参数执行不同的任务。同样,Linux内核也提供了类似main
发表于 06-07 16:23
•593次阅读
Linux Regmap 操作函数
函数 1、Regmap 申请与初始化 regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数。Linux 内核提供
评论