色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Linux內核定時器

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-09-22 08:56 ? 次閱讀

Linux內核定時器

在Linux內核中,也可以通過定時器來完成定時功能。但和單片機不同的是,Linux內核定時器是一種基于未來時間點的計時方式,它以當前時刻為啟動的時間點,以未來的某一時刻為終止點,類似于我們的鬧鐘。
當內核定時器定時時間到達時,會進入用戶指定的函數,相當于軟中斷。內核定時器完成注冊啟動后,僅執行一次后就不會重復執行(即超時候會自動關閉),若需要重復執行則需要手動再次啟動(即修改超時時間)。
Linux內核定時器相關函數位置:include/linux/timer.h

1.相關結構體

??在使用內核定時器時,我們需要關心的相關結構體及其成員:

struct timer_list {
struct list_head entry;
unsigned long expires; /* 定時器時鐘節拍*/
struct tvec_base *base;
void (*function)(unsigned long); /*定時器工作函數 */
unsigned long data; /*傳給定時器工作函數的參數 */
};

?在Linux內核中,有一個全局變量jiffies用來記錄時鐘節拍,每當時鐘中斷觸發一次,jiffies就會+1。因此jiffies變量記錄了系統從啟動開始時鐘中斷觸發的次數。我們由此可以利用jiffies來計算驅動程序運行時長。jiffies每秒增加HZ次,因此jiffies+1的時長有HZ決定。當HZ=100時,jiffies+1的時長則為10ms。在Linux3.5的內核中HZ值默認為200,即jiffies+1的時長則為5ms。

poYBAGMrEGeAUwfeAANFKZpj6zU873.png#pic_center

2.相關函數

2.1 定時器初始化init_timer()

#define init_timer(timer)
函數功能: 初始化定時
形參: 定時器結構體

2.2 啟動定時器add_timer()

void add_timer(struct timer_list *timer)
函數功能: 啟動定時器
形參: 定時器結構體

2.3 修改定時時間mod_timer()

int mod_timer(struct timer_list *timer, unsigned long expires)
函數功能: 修改定時器時間
形參: timer – 定時器結構體
???expires --定時時間( 以時鐘節拍填入)

??注意:expires 填寫是基于jiffies+延時時間

2.4毫秒轉為時鐘節拍 msecs_to_jiffies()

unsigned long msecs_to_jiffies(const unsigned int m)
函數功能: 將毫秒時間轉換為時鐘節拍數
形參: m – 毫秒時間
返回值: – 返回節拍數

2.5微秒轉為時鐘節拍 usecs_to_jiffies()

unsigned long usecs_to_jiffies(const unsigned int u)
函數功能: 將微秒時間轉換為時鐘節拍數
形參: m – 位秒時間
返回值: – 返回節拍數

2.6關閉定時器

int del_timer(struct timer_list *timer)
函數功能:關閉定時器(停用一個定時器)
 define del_timer_sync(t)
函數功能:關閉定時器(停用一個定時器),多處理器使用。如果編內核時不支持 SMP(多處理器), del_timer_sync()和 del_timer()等價

2.7 獲取jiffies時間

#include 
u64 get_jiffies_64(void)
函數功能: 獲取jiffies時間
返回值: 返回時鐘節拍jiffies

2.8 獲取內核高精度時間

ktime_t ktime_get(void)
函數功能: 獲取內核高精度時間
返回值: ktime_t – 共用體類型
union ktime {
	s64	tv64;
	#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
		struct
		 {
			# ifdef __BIG_ENDIAN
			s32	sec, nsec;
			# else
			s32	nsec, sec;
			# endif
		} tv;
	#endif
};

2.9 時間轉換函數

s64 ktime_to_ms(const ktime_t kt) /* 將獲取的系統時鐘轉換為ms單位*/
s64 ktime_to_us(const ktime_t kt) /* 將獲取的系統時鐘轉換為us單位*/
/將獲取的時間轉換為時鐘結構體/
struct timeval ktime_to_timeval(const ktime_t kt)
struct timespec ktime_to_timespec(const ktime_t kt)

3.內核定時器示例

??內核定時器使用步驟:

  1. 初始化內核定時器init_timer,設置超時時間,編寫內核定時工作函數;
  2. 啟動定時器add_timer;
  3. 若需要重復定時,則需要在定時器工作函數中修改超時時間mod_timer
#include 
#include 
#include 
#include 
#include 
struct timer_list timer;
/*定時器工作函數*/
void timer_work(unsigned long data)
{
	ktime_t time1;
	printk("定時器時間到!data=%ld,",data);
	time1=ktime_get();
	printk("定時時間:%llu \n",ktime_to_ms(time1));
	mod_timer(&timer,jiffies+msecs_to_jiffies(2000));/*修改定時時間*/
}
static int __init wbyq_timer_init(void)
{
	timer.expires=jiffies+msecs_to_jiffies(1000);/*定時時間*/
	timer.function=timer_work;/*定時器工作函數*/
	timer.data=666;/*傳給定時器工作函數參數,選填*/
	init_timer(&timer);/*初始化定時器*/
	add_timer(&timer);/*啟動定時器*/
	return 0;
	
}
/*驅動釋放*/
static void __exit wbyq_timer_cleanup(void)
{
	del_timer_sync(&timer);//關閉定時器
    printk("驅動出口,驅動注銷成功\n");
}
module_init(wbyq_timer_init);//驅動入口函數
module_exit(wbyq_timer_cleanup);//驅動出口函數

MODULE_LICENSE("GPL");//驅動注冊協議
MODULE_AUTHOR("it_ashui");
MODULE_DESCRIPTION("Exynos4 timer Driver");
pYYBAGMrEGiANQMXAAEDRiQZ9h4278.png#pic_center  

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40277
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209328
  • 定時器
    +關注

    關注

    23

    文章

    3246

    瀏覽量

    114719
收藏 人收藏

    評論

    相關推薦

    Linux驅動開發-內核定時器

    內核定時器內核用來控制在未來某個時間點(基于jiffies(節拍總數))調度執行某個函數的一種機制,相關函數位于 和 kernel/timer.c 文件
    的頭像 發表于 09-17 15:06 ?1465次閱讀

    芯靈思SinlinxA33開發板Linux內核定時器編程

    Linux 內核定時器內核用來控制在未來某個時間點(基于jiffies)調度執行某個函數的一種機制,其實現位于和 kernel/timer.c 文件中。內核定時器的數據結構struc
    發表于 02-14 14:55

    「正點原子Linux連載」第五十章Linux內核定時器實驗

    1)實驗平臺:正點原子Linux開發板2)摘自《正點原子I.MX6U嵌入式Linux驅動開發指南》關注官方微信號公眾號,獲取更多資料:正點原子第五十章Linux內核定時器實驗
    發表于 03-20 11:22

    「正點原子Linux連載」第五十章Linux內核定時器實驗

    ,獲取更多資料:正點原子第五十章Linux內核定時器實驗定時器是我們最常用到的功能,一般用來完成定時功能,本章我們就來學習一下Linux
    發表于 03-20 11:22

    【正點原子FPGA連載】第三十二章Linux內核定時器實驗-領航者ZYNQ之linux開發指南

    原子公眾號,獲取最新資料第三十二章Linux內核定時器實驗定時器是我們最常用到的功能,一般用來完成定時功能,本章我們就來學習一下Linux
    發表于 09-20 16:57

    STM32設置內核定時器延時

    STM32設置內核定時器延時
    發表于 08-10 06:30

    ARM Cortex-M0+內核定時器

    慕課蘇州大學.嵌入式開發及應用.第三章.基本模塊.ARM Cortex-M0+內核定時器 (Systic0 目錄3 基本模塊3.1 ARM Cortex-M0+內核定時器 (Systic3.1.1
    發表于 11-08 06:36

    Linux內核定時器的相關資料分享

    ?? 致敬英雄!一、Linux內核定時器初探1、圖形界面配置系統節拍率??中斷周期性產生的頻率就是系統頻率,也叫做節拍率(tick rate),單位是 Hz。系統節拍率是可以設置的,在編
    發表于 12-16 07:37

    Linux內核定時器的相關資料分享

    文章目錄Linux內核定時器概念Linux內核定時器基礎知識Linux內核定時器相關函數時間轉換
    發表于 12-20 08:05

    Win32s下內核定時器的使用

    本文介紹了一種Win32s 環境下的內核定時器的用法。該定時器相比常用的多媒體定時器有兩個優點:1,消耗資源更少。2,無需消息隊列。在操作系統負載很重的情況下,該定時器
    發表于 06-15 10:00 ?32次下載

    LINUX內核定時器(高精度&低精度)

    linux內核2.6.16開始引入了高精度定時器,達到ns級別。自此,內核擁有兩套并行計時,低精度和高精度。如果高精度沒有開啟,即使使用
    發表于 05-13 09:41 ?4142次閱讀

    Linux內核定時器的詳細資料概述

    前面我們對按鍵驅動的開發已經基本完成了,但是當你對按鍵多次按下的時候,你會發現打印的返回值是不正確的,這是什么原因呢?學過51單片機的同學你們都應該知道按鍵容易產生抖動,俗稱“消抖”,我以前的處理辦法是設置一個延時10ms,現在我們的按鍵也是需要延時的,當過了10ms我們在去讀這個按鍵值。
    發表于 04-23 18:29 ?2次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內核定時器</b>的詳細資料概述

    Linux內核定制方法

    Linux內核定制方法說明。
    發表于 03-25 11:25 ?9次下載

    慕課嵌入式開發及應用(第三章.ARM Cortex-M0+內核定時器 (Systic)

    慕課蘇州大學.嵌入式開發及應用.第三章.基本模塊.ARM Cortex-M0+內核定時器 (Systic0 目錄3 基本模塊3.1 ARM Cortex-M0+內核定時器 (Systic3.1.1
    發表于 11-03 14:51 ?13次下載
    慕課嵌入式開發及應用(第三章.ARM Cortex-M0+<b class='flag-5'>內核定時器</b> (Systic)

    Linux內核時鐘系統和定時器實現

    Linux內核時鐘系統和定時器實現 Linux 2.6.16之前,內核只支持低精度時鐘,內核定時器
    的頭像 發表于 11-09 09:12 ?1461次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>時鐘系統和<b class='flag-5'>定時器</b>實現
    主站蜘蛛池模板: 97无码欧美熟妇人妻蜜| 男人舔女人的阴部黄色骚虎视频| 亚洲国产成人精品不卡青青草原 | 99久久国产综合精品成人影院| 恋孩癖网站大全在线观看| 中国女人内谢69xxxxxx直播| 久久午夜伦理| 2017天天拍天天拍香蕉视频| 美女pk精子2小游戏| 97亚洲狠狠色综合久久位| 男人被绑着强行摸j| X8X8拨牐拨牐X8免费视频8午夜| 9位美女厕所撒尿11分| 国产成人 免费观看| 香蕉在线播放| 韩国hd高清xxx| 友田真希息与子中文字幕| 麻豆人妻无码性色AV| 99精品久久| 日韩毛片在线视频| 国产精品嫩草影院一区二区三区| 亚洲zooz人禽交xxxx| 精品无码国产自产在线观看水浒传| 亚洲一品AV片观看五月色婷婷| 久久偷拍人| max girls 大感谢祭| 色偷偷亚洲天堂| 国精产品一区一区三区有| 影音先锋av天堂| 欧美eee114| 国产精品VIDEOS麻豆TUBE| 亚洲精品一区国产欧美| 另类重口bdsm日本tv| 百度影音第四色| 午夜精品久久久久久影视riav | 人善交XUANWEN200喷水| 国产精品ⅴ视频免费观看| 亚洲欧洲日韩国产一区二区三区| 久久中文字幕亚洲| 最新国产av.在线视频| 人人澡人人爽人人精品|