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

    文章

    1309

    浏览量

    39850
  • 接口
    +关注

    关注

    33

    文章

    7640

    浏览量

    148516
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
收藏 人收藏

    评论

    相关推荐

    Linux内核学习笔记:printk调试

    很多内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。
    发表于 06-01 15:14 636次阅读

    C语言函数指针在Arm Linux内核源码中的高级玩法

    函数指针在ARM Linux内核源码中有许多高级应用。在这里,我将列举一些常见的应用,附上相应的代码示例,并对代码进行解释。
    发表于 09-06 11:23 243次阅读
    C语言<b class='flag-5'>函数</b>指针在Arm <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>源码中的高级玩法

    高效学习Linux内核——内核模块编译

    内核是世界上最大的开源项目之一,但是内核是什么,它用于什么?一、什么是linux内核模块?内核是与计算机硬件
    发表于 09-24 09:11

    Linux内核源代码

    Linux内核源代码本章讲述在L i n u x内核源码中,应该从何处开始查找特定的内核函数。本书并不要求读者具有C语言编程能力,也不要求读
    发表于 02-09 15:24 36次下载

    linux内核kernel-api

    linux内核kernel-api,不知道从哪儿找的了,但是你如果想要做内核编程,这是一部api函数详尽的工具书!!!五星推荐
    发表于 10-30 17:16 19次下载

    最硬核的Linux内核文章

    内核。 拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么? 02 什么是内核
    的头像 发表于 10-19 17:46 1902次阅读
    最硬核的<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>文章

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

    01 前言 本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux
    的头像 发表于 10-21 12:02 3946次阅读
    快速理解什么是<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>以及<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>的内容

    Linux内核GPIO操作函数的详解分析

    本文档的主要内容详细介绍的是Linux内核GPIO操作函数的详解分析免费下载。
    发表于 01-22 16:58 28次下载

    STM32延时函数的方法

    STM32延时函数的方法 1.普通延时法 这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。 2.SysTick 定时器延时
    的头像 发表于 10-02 16:13 9246次阅读

    单片机:延时函数的理解

    在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的。一般我们写延时函数
    发表于 11-11 09:36 94次下载
    单片机:<b class='flag-5'>延时</b><b class='flag-5'>函数</b>的理解

    C语言 | 延时函数(Delay)

    github:https://github.com/MichaelBeechanCSDN:https://blog.csdn.net/u011344545“nop”函数对于延时很短,要求在us
    发表于 01-13 13:38 14次下载
    C语言 | <b class='flag-5'>延时</b><b class='flag-5'>函数</b>(Delay)

    Linux内核模块参数传递与sysfs文件系统

    Linux应用开发中,为使应用程序更加灵活地执行用户的预期功能,我们有时候会通过命令行传递一些参数到main函数中,使得代码逻辑可以依据参数执行不同的任务。同样,Linux内核也提供了
    发表于 06-07 16:23 1358次阅读

    Linux Regmap 操作函数

    Regmap 操作函数 1、Regmap 申请与初始化 regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数Linux
    的头像 发表于 07-06 17:31 1667次阅读

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

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

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

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