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

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

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

RT-Thread定時器工作機制以及定時器的管理方式

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:lq ? 2019-02-15 10:36 ? 次閱讀

前言

本文記錄RT-Thread時鐘相關(guān)知識,包括時鐘節(jié)拍、RT-Thread定時器工作機制以及定時器的管理方式,在定時器方面有硬件定時器和軟件定時器,這里不講硬件定時器,硬件定時器只需學習裸機時候的硬件定時器即可。后面進行實際的操作時采STM32L475VET6,RTT&正點原子聯(lián)合出品潘多拉開發(fā)板進行實驗。

一、時鐘節(jié)拍

任何操作系統(tǒng)都需要提供一個時鐘節(jié)拍,以供系統(tǒng)處理所有和時間有關(guān)的事件,如線程的延時、線程的時間片輪轉(zhuǎn)調(diào)度以及定時器超時等。時鐘節(jié)拍是特定的周期性中斷,這個中斷可以看做是系統(tǒng)心跳,中斷之間的時間間隔取決于不同的應(yīng)用,一般是 1ms–100ms,時鐘節(jié)拍率越快,系統(tǒng)的額外開銷就越大,從系統(tǒng)啟動開始計數(shù)的時鐘節(jié)拍數(shù)稱為系統(tǒng)時間。

1、定義時鐘節(jié)拍大小

RT-Thread 中,時鐘節(jié)拍的長度可以根據(jù) RT_TICK_PER_SECOND 的定義來調(diào)整,RT_TICK_PER_SECOND 在rtconfig.h里面定義,時鐘節(jié)拍的長度等于 1/RT_TICK_PER_SECOND 秒,如下是1個時鐘節(jié)拍為1ms:

1#defineRT_TICK_PER_SECOND1000//定義時鐘節(jié)拍,為1000時表示1000個tick每秒,一個tick為1ms

2、時鐘節(jié)拍的實現(xiàn)方式

時鐘節(jié)拍由配置為中斷觸發(fā)模式的硬件定時器產(chǎn)生。

在前面講移植RT-Thread的時候,修改board.c中,有如下函數(shù):

1voidSysTick_Handler(void) 2{ 3/*enterinterrupt*/ 4rt_interrupt_enter(); 5 6rt_tick_increase(); 7 8/*leaveinterrupt*/ 9rt_interrupt_leave();10}

當中斷到來時,將調(diào)用一次rt_tick_increase();,而在中斷函數(shù)中調(diào)用 rt_tick_increase() 對全局變量 rt_tick 進行自加,如下代碼:

1/** 2*Thisfunctionwillnotifykernelthereisonetickpassed.Normally, 3*thisfunctionisinvokedbyclockISR. 4*/ 5voidrt_tick_increase(void) 6{ 7structrt_thread*thread; 8 9/*increasetheglobaltick*/10++rt_tick;1112/*checktimeslice*/13thread=rt_thread_self();1415--thread->remaining_tick;16if(thread->remaining_tick==0)17{18/*changetoinitializedtick*/19thread->remaining_tick=thread->init_tick;2021/*yield*/22rt_thread_yield();23}2425/*checktimer*/26rt_timer_check();27}

可以看到全局變量 rt_tick 在每經(jīng)過一個時鐘節(jié)拍時,值就會加 1,rt_tick 的值表示了系統(tǒng)從啟動開始總共經(jīng)過的時鐘節(jié)拍數(shù),即系統(tǒng)時間。此外,每經(jīng)過一個時鐘節(jié)拍時,都會檢查當前線程的時間片是否用完,以及是否有定時器超時。

注意:上面的中斷中的rt_timer_check()用于檢查系統(tǒng)硬件定時器鏈表,如果有定時器超時,將調(diào)用相應(yīng)的超時函數(shù)。且所有定時器在定時超時后都會從定時器鏈表中被移除,而周期性定時器會在它再次啟動時被加入定時器鏈表。

3、獲取時鐘節(jié)拍

在RT-Thread中,全局變量rt_tick在每經(jīng)過一個時鐘節(jié)拍時,值就會加 1,通過調(diào)用rt_tick_get會返回當前rt_tick的值,即可以獲取到當前的時鐘節(jié)拍值。此接口可用于記錄系統(tǒng)的運行時間長短,或者測量某任務(wù)運行的時間。

1/** 2*Thisfunctionwillreturncurrenttickfromoperatingsystemstartup 3* 4*@returncurrenttick 5*/ 6rt_tick_trt_tick_get(void) 7{ 8/*returntheglobaltick*/ 9returnrt_tick;10}11RTM_EXPORT(rt_tick_get);

二、軟件定時器

RT-Thread 的軟件定時器提供兩類定時器機制:第一類是單次觸發(fā)定時器,這類定時器在啟動后只會觸發(fā)一次定時器事件,然后定時器自動停止。第二類是周期觸發(fā)定時器,這類定時器會周期性的觸發(fā)定時器事件,直到用戶手動的停止,否則將永遠持續(xù)執(zhí)行下去。軟件定時器的優(yōu)先級為RT_TIMER_THREAD_PRIO。

1、開啟軟件定時宏

如果要開啟使用軟件定時器,需再rtconfig.h中打開軟件定時器的宏:

1#defineRT_USING_TIMER_SOFT//定義該宏可開啟軟件定時器,未定義則關(guān)閉

2、軟件定時器工作機制

(1)在 RT-Thread 定時器模塊中維護著兩個重要的全局變量:

(A)當前系統(tǒng)經(jīng)過的 tick 時間 rt_tick(當硬件定時器中斷來臨時,它將加 1);(B)定時器鏈表 rt_timer_list。系統(tǒng)新創(chuàng)建并激活的定時器都會按照以超時時間排序的方式插入到rt_timer_list 鏈表中。

(2)如下圖所示,系統(tǒng)當前 tick 值為 20,在當前系統(tǒng)中已經(jīng)創(chuàng)建并啟動了三個定時器,分別是定時時間為50 個tick的Timer1、100 個tick的 Timer2 和 500 個 tick 的 Timer3,這三個定時器分別加上系統(tǒng)當前時間rt_tick=20,從小到大排序鏈接rt_timer_list鏈表中,形成如圖所示的定時器鏈表結(jié)構(gòu)。而rt_tick隨著硬件定時器的觸發(fā)一直在增長(每一次硬件定時器中斷來臨,rt_tick變量會加 1),50個tick以后,rt_tick從 20 增長到 70,與Timer1的timeout值相等,這時會觸發(fā)與Timer1定時器相關(guān)聯(lián)的超時函數(shù),同時將 Timer1 從rt_timer_list鏈表上刪除。同理,100 個 tick 和 500 個 tick 過去后,與Timer2 和 Timer3 定時器相關(guān)聯(lián)的超時函數(shù)會被觸發(fā),接著將 Time2 和 Timer3 定時器從rt_timer_list鏈表中刪除。

定時器鏈表插入示意圖(來源RT-Thread編程指南)

(3)如果系統(tǒng)當前定時器狀態(tài)在 10 個tick以后(rt_tick=30)有一個任務(wù)新創(chuàng)建了一個 tick 值為 300 的Timer4 定時器,由于 Timer4 定時器的timeout=rt_tick+300=330, 因此它將被插入到 Timer2 和 Timer3定時器中間,形成如下圖所示鏈表結(jié)構(gòu)。

圖片占位 定時器鏈表插入示意圖(來源RT-Thread編程指南)

注意:所有定時器在定時超時后都會從定時器鏈表中被移除,而周期性定時器會在它再次啟動時被加入定時器鏈表。

3、動態(tài)創(chuàng)建軟件定時器函數(shù)

調(diào)用動態(tài)創(chuàng)建軟件定時器函數(shù)接口后,內(nèi)核首先從動態(tài)內(nèi)存堆中分配一個定時器控制塊,然后對該控制塊進行基本的初始化,函數(shù)如下:

1rt_timer_trt_timer_create(constchar*name,2void(*timeout)(void*parameter),3void*parameter,4rt_tick_ttime,5rt_uint8_tflag);

(1)入口參數(shù)

name:定時器的名稱。name 定時器的名稱void (timeout) (voidparameter):定時器超時函數(shù)指針(當定時器超時時,系統(tǒng)會調(diào)用這個函數(shù),即定時器超時回調(diào)函數(shù))。parameter:定時器超時函數(shù)的入口參數(shù)(當定時器超時時,調(diào)用超時回調(diào)函數(shù)會把這個參數(shù)做為入口參數(shù)傳遞給超時函數(shù))。time:定時器的超時時間,單位是時鐘節(jié)拍。flag:定時器創(chuàng)建時的參數(shù),支持的值包括單次定時、周期定時、硬件定時器、軟件定時器等(可以用 “或” 關(guān)系取多個值)。

(2)返回值:

RT_NULL:創(chuàng)建失?。ㄍǔ捎谙到y(tǒng)內(nèi)存不夠用而返回 RT_NULL)定時器的句柄:定時器創(chuàng)建成功時返回定時句柄。

(3)include/rtdef.h中定義了一些定時器相關(guān)的宏,通過如下4個宏或起來后賦給flag,來指定定時器類型:

1#defineRT_TIMER_FLAG_ONE_SHOT0x0/**

4、刪除動態(tài)定時器函數(shù)

當不再需要動態(tài)定時器時,可以將其刪除,執(zhí)行如下函數(shù)之后系統(tǒng)會把這個定時器從rt_timer_list鏈表中刪除,然后釋放相應(yīng)的定時器控制塊占有的內(nèi)存:rt_err_t rt_timer_delete(rt_timer_t timer);

(1)入口參數(shù):

timer:定時器句柄,指向要刪除的定時器。

(2)返回值:RT_EOK:刪除成功(如果參數(shù) timer 句柄是一個 RT_NULL,將會導致一個 ASSERT 斷言)

5、靜態(tài)創(chuàng)建軟件定時器

靜態(tài)創(chuàng)建軟件定時器也就是《RT-Thread編程指南》里面所講的定時器初始化,如下面函數(shù),使用該函數(shù)接口時會初始化相應(yīng)的定時器控制塊,初始化相應(yīng)的定時器名稱,定時器超時函數(shù):

1voidrt_timer_init(rt_timer_ttimer,2constchar*name,3void(*timeout)(void*parameter),4void*parameter,5rt_tick_ttime,6rt_uint8_tflag);

(1)入口參數(shù):

timer:定時器句柄,指向要初始化的定時器控制塊。name:定時器的名稱void (timeout) (voidparameter):定時器超時函數(shù)指針(當定時器超時時,系統(tǒng)會調(diào)用這個函數(shù),即定時器超時回調(diào)函數(shù))。parameter:定時器超時函數(shù)的入口參數(shù)(當定時器超時時,調(diào)用超時回調(diào)函數(shù)會把這個參數(shù)做為入口參數(shù)傳遞給超時函數(shù))。time:定時器的超時時間,單位是時鐘節(jié)拍flag:定時器創(chuàng)建時的參數(shù),支持的值包括單次定時、周期定時、硬件定時器、軟件定時器(可以用 “或” 關(guān)系取多個值)。

6、刪除靜態(tài)定時器函數(shù)

當不再需要靜態(tài)定時器時,可將它刪除,也就是《RT-Thread編程》指南里面所說的脫離定時器。脫離定時器時,系統(tǒng)會把定時器對象從內(nèi)核對象容器中脫離,但是定時器對象所占有的內(nèi)存不會被釋放:

1rt_err_trt_timer_detach(rt_timer_ttimer);

(1)入口參數(shù):

timer:定時器句柄,指向要脫離的定時器控制塊。

(2)返回值:

RT_EOK:脫離成功。

7、啟動軟件定時器

前面講了定時器的創(chuàng)建,但創(chuàng)建好的定時器并不會立即開始工作,需要在調(diào)用啟動定時器函數(shù)接口后才開始工作,調(diào)用定時器啟動函數(shù)接口后,定時器的狀態(tài)將更改為激活狀態(tài)(RT_TIMER_FLAG_ACTIVATED),并按照超時順序插入到rt_timer_list隊列鏈表中,啟動函數(shù)如下:

1rt_err_trt_timer_start(rt_timer_ttimer);

(1)入口參數(shù):

timer:定時器句柄,指向要啟動的定時器控制塊。

(2)返回值:

RT_EOK:啟動成功。

8、停止軟件定時器

啟動定時器以后,若想使它停止,可調(diào)用停止函數(shù),調(diào)用定時器停止函數(shù)接口后,定時器狀態(tài)將更改為停止狀態(tài)(RT_TIMER_FLAG_DEACTIVATED),并從rt_timer_list鏈表中脫離出來不參與定時器超時檢查,函數(shù)如下:

1rt_err_trt_timer_stop(rt_timer_ttimer);

(1)入口參數(shù):

timer:定時器句柄,指向要停止的定時器控制塊。

(2)返回值:

RT_EOK:成功停止定時器。RT_ERROR:timer 已經(jīng)處于停止狀態(tài)。。

9、控制定時器

控制定時器函數(shù)接口可根據(jù)命令類型參數(shù),來查看或改變定時器的設(shè)置,函數(shù)如下:

1rt_err_trt_timer_control(rt_timer_ttimer,intcmd,void*arg);

(1)入口參數(shù):

timer:定時器句柄,指向要停止的定時器控制塊。cmd:用于控制定時器的命令,當前支持四個命令,分別是設(shè)置定時時間,查看定時時間,設(shè)置單次觸發(fā),設(shè)置周期觸發(fā)。arg:與 cmd 相對應(yīng)的控制命令參數(shù)比如,cmd 為設(shè)定超時時間時,就可以將超時時間參數(shù)通過arg 進行設(shè)定。

(2)函數(shù)參數(shù) cmd 支持的命令:

1#defineRT_TIMER_CTRL_SET_TIME0x0/*設(shè)置定時器超時時間*/2#defineRT_TIMER_CTRL_GET_TIME0x1/*獲得定時器超時時間*/3#defineRT_TIMER_CTRL_SET_ONESHOT0x2/*設(shè)置定時器為單次定時器*/4#defineRT_TIMER_CTRL_SET_PERIODIC0x3/*設(shè)置定時器為周期型定時器*/

(3)返回值:

RT_EOK:成功

三、基于STM32的軟件定時器應(yīng)用示例

前面講了很多RT-Thread定時器方面的東西,實際上,我如果用RT-Thread的定時相關(guān)接口的話,一般都是用軟件定時器,硬件定時器通常我們都是自己像以前學習裸機那邊去用。接下來我們來實際使用一些RT-Thread的軟件定時器,使用RTT&正點原子聯(lián)合出品的潘多拉開發(fā)板來實驗:(1)動態(tài)創(chuàng)建一個軟件定時器,周期執(zhí)行,實現(xiàn)定時器超時時打印出當前獲取滴答定時器的計數(shù)值以及回調(diào)函數(shù)執(zhí)行次數(shù)。(2)動態(tài)創(chuàng)建一個線程,通過按下KEY0來啟動軟件定時器,按下KEY1來停止軟件定時器。

1、實現(xiàn)代碼

1#include"main.h" 2#include"board.h" 3#include"rtthread.h" 4#include"data_typedef.h" 5#include"delay.h" 6#include"led.h" 7#include"key.h" 8 9voidrt_sw_timer1(void); 10voidkey_start(void); 11 12staticrt_timer_ttimer1;/*timer1句柄*/ 13intg_sw_timer1_count=0; 14 15intmain(void) 16{ 17rt_sw_timer1(); 18key_start(); 19 20return0; 21} 22 23/************************************************************** 24函數(shù)名稱:rt_sw_timer1_callback 25函數(shù)功能:軟件定時timer1回調(diào)函數(shù) 26輸入?yún)?shù):parameter:回調(diào)函數(shù)的入口參數(shù),當定時器超時, 27調(diào)用回調(diào)函數(shù)會把這個參數(shù)做為入口參數(shù)傳遞給回調(diào)函數(shù)。 28返回值:無 29備注:無 30**************************************************************/ 31voidrt_sw_timer1_callback(void*parameter) 32{ 33u32tick_num1; 34 35tick_num1=(u32)rt_tick_get();/*獲取滴答定時器的計數(shù)值*/ 36g_sw_timer1_count++; 37 38rt_kprintf("tick_num1=%d\r\n",tick_num1); 39rt_kprintf("enterrt_sw_timer_callback,g_sw_timer1_count=%d\r\n",g_sw_timer1_count); 40} 41 42/************************************************************** 43函數(shù)名稱:rt_sw_timer1 44函數(shù)功能:軟件定時timer1動態(tài)創(chuàng)建函數(shù) 45輸入?yún)?shù):無 46返回值:無 47備注:無 48**************************************************************/ 49voidrt_sw_timer1(void) 50{ 51/*動態(tài)創(chuàng)建軟件定時器,周期執(zhí)行*/ 52timer1=rt_timer_create("timer1", 53rt_sw_timer1_callback, 54RT_NULL, 555000,/*周期為5000個時鐘節(jié)拍*/ 56RT_TIMER_FLAG_SOFT_TIMER|RT_TIMER_FLAG_PERIODIC);/*軟件定時器,周期執(zhí)行*/ 57} 58 59/************************************************************** 60函數(shù)名稱:key_thread_entry 61函數(shù)功能:key線程入口函數(shù) 62輸入?yún)?shù):parameter:線程入口函數(shù)參數(shù) 63返回值:無 64備注:無 65**************************************************************/ 66voidkey_thread_entry(void*parameter) 67{ 68u8key; 69 70while(1) 71{ 72key=key_scan(0); 73if(key==KEY0_PRES) 74{ 75rt_timer_start(timer1); 76rt_kprintf("RT-Threadswtimer1satrt\r\n"); 77} 78elseif(key==KEY1_PRES) 79{ 80rt_timer_stop(timer1); 81rt_kprintf("RT-Threadswtimer1stop\r\n"); 82} 83rt_thread_mdelay(1); 84} 85 86} 87 88/************************************************************** 89函數(shù)名稱:key_start 90函數(shù)功能:創(chuàng)建并啟動key線程 91輸入?yún)?shù):無 92返回值:無 93備注:無 94**************************************************************/ 95voidkey_start(void) 96{ 97rt_thread_tkey_thread=RT_NULL;; 98 99/*動態(tài)創(chuàng)建KEY線程*/100key_thread=rt_thread_create("key",101key_thread_entry,102RT_NULL,103512,/*線程棧大小,單位是字節(jié)*/104RT_THREAD_PRIORITY_MAX/2-5,/*優(yōu)先級*/10550);/*50個時鐘節(jié)拍*/106/*創(chuàng)建KEY線程成功,則啟動線程*/107if(key_thread!=RT_NULL)108{109rt_thread_startup(key_thread);110}111}

2、觀察FinSH

(1)開機之后,等待超過軟件定時配置的周期過后,還是沒有打印出回調(diào)函數(shù)要打印的信息,說明回調(diào)函數(shù)沒有被執(zhí)行,為什么呢?因為我們創(chuàng)建軟件定時器之后還沒啟動軟件定時器,我們輸入list_timer回車,可以看到timer1是處于deactivated狀態(tài)。

(2)按下KEY0按鍵,啟動軟件定時器,可觀察到每個5s打印一次當前tick的數(shù)值和回調(diào)函數(shù)的執(zhí)行次數(shù),將前后兩次tick的數(shù)值相減大概為5006ms,再次輸入list_timer,可看到timer1為activated狀態(tài)。

(3)按下KEY1按鍵,停止軟件定時器,停止打印回調(diào)函數(shù)要打印的信息,輸入list_timer,可以看到timer1為deactivated狀態(tài)。

四、軟件定時器設(shè)計注意事項

在設(shè)計日軟件定時器時,超時回調(diào)函數(shù)的要求嚴格:執(zhí)行時間應(yīng)該盡量短,執(zhí)行時不應(yīng)導致當前上下文掛起、等待。例如在中斷上下文中執(zhí)行的超時函數(shù)它不應(yīng)該試圖去申請動態(tài)內(nèi)存、釋放動態(tài)內(nèi)存等,也不允許調(diào)用rt_thread_delay()等導致上下文掛起的 API 接口。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

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

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61971
  • 時鐘管理
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8329

原文標題:社區(qū)新人的RT-Thread學習筆記2——時鐘管理

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    rt-thread 驅(qū)動篇(八)hwtimer 重載算法優(yōu)化

    區(qū)別于 rt-thread 內(nèi)核實現(xiàn)的兩種定時器,這種定時器依賴芯片內(nèi)置的定時器外設(shè),依靠穩(wěn)定高速的晶振實現(xiàn)精確定時,可以實現(xiàn)
    的頭像 發(fā)表于 06-23 10:10 ?2879次閱讀
    <b class='flag-5'>rt-thread</b> 驅(qū)動篇(八)hwtimer 重載算法優(yōu)化

    RT-Thread記錄(四、RTT時鐘節(jié)拍和軟件定時器

    RT-Thread第4課,聽聽 RT-Thread 的心跳,再學習一下基于心跳的軟件定時器使用。
    的頭像 發(fā)表于 06-20 11:50 ?7217次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(四、RTT時鐘節(jié)拍和軟件<b class='flag-5'>定時器</b>)

    rt-thread優(yōu)化系列(三)軟定時器定時漂移問題分析

    所謂軟定時器,是由一個線程運行維護的定時器列表。由線程調(diào)用定時器回調(diào)函數(shù)。
    的頭像 發(fā)表于 06-23 09:35 ?3247次閱讀

    【每日一練】RT-Thread Nano-ADC(時鐘管理之軟件定時器)-3軟件定時器內(nèi)核代碼分析(第十七節(jié)學習視頻)

    )【每日一練】RT-Thread Nano-ADC(時鐘管理之軟件定時器)-1軟件定時器創(chuàng)建(第十五節(jié)學習視頻)【每日一練】RT-Thread
    發(fā)表于 06-02 10:32

    【每日一練】課程實踐-基于RT-Thread內(nèi)核定時器的電壓采集

    是基于對何老師課程的理解,做一個使用內(nèi)核的定時器來周期獲取電壓的采樣值,以這個實踐來鞏固這段時間學習到的RT-Thread的知識,借這篇文章分享課程感悟,幫助更多想學習RT-Thread的小伙伴。二
    發(fā)表于 06-24 11:21

    RT-Thread提供了怎樣的定時器操作函數(shù)以及如何使用它們呢

    。rt_tick 的值表示了系統(tǒng)從啟動到現(xiàn)在共經(jīng)過的時鐘節(jié)拍個數(shù)。定時器工作機制RT-Thread 提供的
    發(fā)表于 04-02 11:41

    請問下rt-thread是否有更高定時器對象的實現(xiàn)

    查看rt-thread的源碼和相關(guān)文檔,已經(jīng)了解到了rt-thread定時器的實現(xiàn)原理,如文檔介紹,該定時器的精度并不很高,請問下,r-thread
    發(fā)表于 05-09 11:40

    如何利用RT-Thread的接口去訪問硬件定時器設(shè)備呢

    間達到500ms后,框架會調(diào)用用戶預先設(shè)置好的回調(diào)函數(shù)。訪問硬件定時器設(shè)備應(yīng)用程序通過 RT-Thread 提供的 I/O 設(shè)備管理接口來訪問硬件定時器設(shè)備,相關(guān)接口如下所示:查找
    發(fā)表于 07-22 10:31

    RT-Thread系統(tǒng)定時器管理相關(guān)資料介紹

    1、RT-Thread系統(tǒng)定時器管理  定時器,是指從指定的時刻開始,經(jīng)過一個指定時間,然后觸發(fā)一個事件,類似定個時間提醒第二天能夠按時起床
    發(fā)表于 09-14 16:21

    RT-Thread軟件定時器怎么獲取定時器的狀態(tài)?

    rt-thread 軟件定時器怎么獲取定時器的狀態(tài) 比如獲取當前定時器是運行狀態(tài),還是停止狀態(tài) ,自己加flag的方法除外哈
    發(fā)表于 01-31 15:19

    STM32定時器-基本定時器

    目錄定時器分類基本定時器功能框圖講解基本定時器功能時鐘源計數(shù)時鐘計數(shù)自動重裝載寄存
    發(fā)表于 11-23 18:21 ?31次下載
    STM32<b class='flag-5'>定時器</b>-基本<b class='flag-5'>定時器</b>

    詳細剖析Linux和RTOS(RT-Thread)的時鐘和定時器的使用

    Linux發(fā)燒友1.RTOS篇1.1RT-Thread簡介1.2時鐘管理1.2.1時鐘節(jié)拍1.3獲取系統(tǒng)節(jié)拍1.4定時器分類1.5定時器源碼分析1.6
    發(fā)表于 01-17 09:31 ?4次下載
    詳細剖析Linux和RTOS(<b class='flag-5'>RT-Thread</b>)的時鐘和<b class='flag-5'>定時器</b>的使用

    RT-Thread學習筆記 -- 時鐘管理

    RT-Thread學習筆記 – 時鐘管理軟件硬件定時器區(qū)別1.定時器分為硬件定時器和軟件定時器。
    發(fā)表于 01-17 09:53 ?1次下載
    <b class='flag-5'>RT-Thread</b>學習筆記 -- 時鐘<b class='flag-5'>管理</b>

    RT-Thread驅(qū)動篇:hwtimer重載值算法

    區(qū)別于 rt-thread 內(nèi)核實現(xiàn)的兩種定時器,這種定時器依賴芯片內(nèi)置的定時器外設(shè),依靠穩(wěn)定高速的晶振實現(xiàn)精確定時,可以實現(xiàn)
    的頭像 發(fā)表于 04-01 10:06 ?1675次閱讀

    定時器工作方式介紹

    定時器是計算機和嵌入式系統(tǒng)中常見的一種硬件模塊,用于實現(xiàn)定時和計數(shù)功能。定時器工作方式通常由一組寄存來控制,這些寄存
    的頭像 發(fā)表于 07-12 10:29 ?454次閱讀