0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内核延时函数接口

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-04 15:40 次阅读

内核延时函数接口

延时的函数有delaysleep两种类型:

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:赫兹,也叫 节拍率 ,表示 每秒种产生多少次中断

例如:HZ200,代表每秒产生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内核GPIO操作函数的详解分析

    Linux内核GPIO操作函数的详解分析免费下载。
    发表于 01-22 16:58 28次下载

    C语言 | 延时函数(Delay)

    函数对于延时很短,要求在us级
    发表于 01-13 13:38 10次下载
    C语言 | <b>延时</b><b>函数</b>(Delay)

    延时函数的理解

    延时函数通过运行一次计算CPU所用的时间来达到延时延时的目的,延时时间为:计算次数/cpu频率(MHZ)=延时时间(us)
    发表于 01-18 10:26 3次下载
    对<b>延时</b><b>函数</b>的理解

    Linux 内核数据结构:位图(Bitmap)

    Linux内核还提供了位图接口。位图在Linux内核中大量使用。下面的源代码文件包含这些结构的通用接口
    发表于 05-14 17:24 3011次阅读

    嵌入式Linux内核的驱动程序开发是怎样的

    linux内核的一部分,是操作系统内核和机器硬件之间的接口,它由一组函数和一些私有数据组成,是连接应用程序与具体硬件的桥梁。
    发表于 11-06 11:33 1170次阅读
    嵌入式<b>Linux</b><b>内核</b>的驱动程序开发是怎样的

    最硬核的Linux内核文章

    内核。 拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么? 02 什么是内核 内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以用户模式运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(
    的头像 发表于 10-19 17:46 1692次阅读
    最硬核的<b>Linux</b><b>内核</b>文章

    快速理解什么是Linux内核以及Linux内核的内容

    Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。 拥有超过1300万行的代码,
    的头像 发表于 10-21 12:02 3513次阅读
    快速理解什么是<b>Linux</b><b>内核</b>以及<b>Linux</b><b>内核</b>的内容

    Linux内核热补丁安全隐患的探索

    Linux 内核热补丁可以修复正在运行的 linux 内核,是一种维持线上稳定性不可缺少的措施,现在比较常见的比如 kpatch 和 livepatch。内核热补丁可以修复内核中正在运行的函数,用已
    的头像 发表于 10-11 11:54 1294次阅读
    <b>Linux</b><b>内核</b>热补丁安全隐患的探索

    Linux内核系统调用概述及实现原理

    函数和应用程序接口(API)有怎样的关系。然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入
    的头像 发表于 05-14 14:11 1625次阅读
    <b>Linux</b><b>内核</b>系统调用概述及实现原理

    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 内核提供
    的头像 发表于 07-06 17:31 1007次阅读

    万千设备,linux内核如何知道?

    linux内核设备的注册由device_register()函数完成,这个函数linux设备驱动模型的核心
    的头像 发表于 07-12 08:52 173次阅读
    万千设备,<b>linux</b><b>内核</b>如何知道?

    Linux内核如何使用结构体和函数指针?

    Linux内核驱动框架代码来展示Linux内核如何使用结构体和函数指针。
    的头像 发表于 09-06 14:17 189次阅读
    <b>Linux</b><b>内核</b>如何使用结构体和<b>函数</b>指针?