0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核延時函數(shù)接口

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-04 15:40 ? 次閱讀

內(nèi)核延時函數(shù)接口

延時的函數(shù)有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的區(qū)別

delay型延時:忙等待,占用CPU資源,延遲過程無法進行其他任務(wù)。

sleep型延時:休眠,不占用CPU資源,其它模塊此時可以使用CPU資源。

低分辨率定時器

jiffies和HZ

jiffies:全局變量,表示 系統(tǒng)啟動以來產(chǎn)生的節(jié)拍數(shù) 。每產(chǎn)生一次中斷,jiffies自動加一。

HZ:赫茲,也叫 節(jié)拍率 ,表示 每秒種產(chǎn)生多少次中斷 。

例如:HZ200,代表每秒產(chǎn)生200次中斷,那2秒鐘jiffies的值就應(yīng)該是400。因此系統(tǒng)的運行時間可以用jiffies/HZ表示。

一秒鐘:jiffies + HZ表示一秒鐘

原因:內(nèi)核中統(tǒng)計時間是通過jiffies,因此要比較時間或者定時也是通過jiffies。

例如程序運行一秒鐘,內(nèi)核如何知道運行了一秒?答案是運行一秒后的jiffies值和運行前的jiffies值進行比較,如果相差為一個HZ,則代表一秒鐘。jiffies+HZ其實就是一秒后jiffies的值,所以jiffies+HZ可以間接表示一秒鐘。

定時2秒:jiffies + 2*HZ。以此類推

獲取當前的jiffies值,可以用get_jiffies_64()函數(shù)。

將時間轉(zhuǎn)為對應(yīng)的jiffies值,可以用msecs_to_jiffies()等函數(shù),例如msecs_to_jiffies(1000)代表1秒,函數(shù)返回值其實就是HZ。

相關(guān)接口

#include< linux/timer.h >

struct timer_list { 
    struct list_head list;  
    unsigned long expires;  //定時器到期時間,傳入的是jiffies值
    unsigned long data;  //作為參數(shù)被傳入定時器處理函數(shù)
    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轉(zhuǎn)為對應(yīng)的毫秒值
unsigned int jiffies_to_usecs (const unsigned long j);//將jiffies轉(zhuǎn)為對應(yīng)的微秒值
unsigned long msecs_to_jiffies (const unsigned int m);//將毫秒值轉(zhuǎn)為對應(yīng)的jiffies
unsigned long usecs_to_jiffies (const unsigned int u);//將微秒值轉(zhuǎn)為對應(yīng)的jiffies
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1378

    瀏覽量

    40342
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8668

    瀏覽量

    151526
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11327

    瀏覽量

    209965
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4343

    瀏覽量

    62806
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)核學(xué)習筆記:printk調(diào)試

    很多內(nèi)核開發(fā)者喜歡的調(diào)試工具是printk,在Linux內(nèi)核中,使用printk()函數(shù)來打印信息,它與C庫的printf()函數(shù)類似。
    發(fā)表于 06-01 15:14 ?1186次閱讀

    Linux內(nèi)核教程

    本章學(xué)習目標掌握LINUX內(nèi)核版本的含義理解并掌握進程的概念掌握管道的概念及實現(xiàn)了解內(nèi)核的數(shù)據(jù)結(jié)構(gòu)了解LINUX內(nèi)核的算法掌握
    發(fā)表于 04-10 16:59 ?0次下載

    linux內(nèi)核kernel-api

    linux內(nèi)核kernel-api,不知道從哪兒找的了,但是你如果想要做內(nèi)核編程,這是一部api函數(shù)詳盡的工具書?。。∥逍峭扑]
    發(fā)表于 10-30 17:16 ?19次下載

    Linux 內(nèi)核數(shù)據(jù)結(jié)構(gòu):位圖(Bitmap)

    除了各種鏈式和樹形數(shù)據(jù)結(jié)構(gòu),Linux內(nèi)核還提供了位圖接口。位圖在Linux內(nèi)核中大量使用。下面的源代碼文件包含這些結(jié)構(gòu)的通用
    發(fā)表于 05-14 17:24 ?3493次閱讀

    嵌入式Linux內(nèi)核的驅(qū)動程序開發(fā)是怎樣的

    設(shè)備驅(qū)動程序是linux內(nèi)核的一部分,是操作系統(tǒng)內(nèi)核和機器硬件之間的接口,它由一組函數(shù)和一些私有數(shù)據(jù)組成,是連接應(yīng)用程序與具體硬件的橋梁。
    發(fā)表于 11-06 11:33 ?1521次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的驅(qū)動程序開發(fā)是怎樣的

    最硬核的Linux內(nèi)核文章

    內(nèi)核。 擁有超過1300萬行的代碼,Linux內(nèi)核是世界上最大的開源項目之一,但是內(nèi)核是什么,它用于什么? 02 什么是內(nèi)核
    的頭像 發(fā)表于 10-19 17:46 ?2141次閱讀
    最硬核的<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>文章

    快速理解什么是Linux內(nèi)核以及Linux內(nèi)核的內(nèi)容

    01 前言 本文主要講解什么是Linux內(nèi)核,以及通過多張圖片展示Linux內(nèi)核的作用與功能,以便于讀者能快速理解什么是Linux
    的頭像 發(fā)表于 10-21 12:02 ?4316次閱讀
    快速理解什么是<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>以及<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的內(nèi)容

    Linux內(nèi)核GPIO操作函數(shù)的詳解分析

    本文檔的主要內(nèi)容詳細介紹的是Linux內(nèi)核GPIO操作函數(shù)的詳解分析免費下載。
    發(fā)表于 01-22 16:58 ?28次下載

    Linux內(nèi)核熱補丁安全隱患的探索

    Linux 內(nèi)核熱補丁可以修復(fù)正在運行的 linux 內(nèi)核,是一種維持線上穩(wěn)定性不可缺少的措施,現(xiàn)在比較常見的比如 kpatch 和 livepatch。
    的頭像 發(fā)表于 10-11 11:54 ?1761次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>熱補丁安全隱患的探索

    C語言 | 延時函數(shù)(Delay)

    github:https://github.com/MichaelBeechanCSDN:https://blog.csdn.net/u011344545“nop”函數(shù)對于延時很短,要求在us級
    發(fā)表于 01-13 13:38 ?14次下載
    C語言 | <b class='flag-5'>延時</b><b class='flag-5'>函數(shù)</b>(Delay)

    Linux內(nèi)核系統(tǒng)調(diào)用概述及實現(xiàn)原理

    本文介紹了系統(tǒng)調(diào)用的一些實現(xiàn)細節(jié)。首先分析了系統(tǒng)調(diào)用的意義,它們與庫函數(shù)和應(yīng)用程序接口(API)有怎樣的關(guān)系。然后,我們考察了Linux內(nèi)核如何實現(xiàn)系統(tǒng)調(diào)用,以及執(zhí)行系統(tǒng)調(diào)用的連鎖反應(yīng)
    的頭像 發(fā)表于 05-14 14:11 ?2243次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>系統(tǒng)調(diào)用概述及實現(xiàn)原理

    Linux內(nèi)核模塊參數(shù)傳遞與sysfs文件系統(tǒng)

    Linux應(yīng)用開發(fā)中,為使應(yīng)用程序更加靈活地執(zhí)行用戶的預(yù)期功能,我們有時候會通過命令行傳遞一些參數(shù)到main函數(shù)中,使得代碼邏輯可以依據(jù)參數(shù)執(zhí)行不同的任務(wù)。同樣,Linux內(nèi)核也提供了
    發(fā)表于 06-07 16:23 ?2180次閱讀

    Linux Regmap 操作函數(shù)

    Regmap 操作函數(shù) 1、Regmap 申請與初始化 regmap 支持多種物理總線,比如 I2C 和 SPI,我們需要根據(jù)所使用的接口來選擇合適的 regmap 初始化函數(shù)Linux
    的頭像 發(fā)表于 07-06 17:31 ?3027次閱讀

    萬千設(shè)備,linux內(nèi)核如何知道?

    linux內(nèi)核設(shè)備的注冊由device_register()函數(shù)完成,這個函數(shù)linux設(shè)備驅(qū)動模型的核心
    的頭像 發(fā)表于 07-12 08:52 ?880次閱讀
    萬千設(shè)備,<b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>如何知道?

    Linux內(nèi)核如何使用結(jié)構(gòu)體和函數(shù)指針?

    我將結(jié)合具體的Linux內(nèi)核驅(qū)動框架代碼來展示Linux內(nèi)核如何使用結(jié)構(gòu)體和函數(shù)指針。
    的頭像 發(fā)表于 09-06 14:17 ?1052次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>如何使用結(jié)構(gòu)體和<b class='flag-5'>函數(shù)</b>指針?