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

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

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

RT-Thread定時(shí)器工作機(jī)制以及定時(shí)器的管理方式

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

前言

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

一、時(shí)鐘節(jié)拍

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

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

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

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

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

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

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

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

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

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)過一個(gè)時(shí)鐘節(jié)拍時(shí),值就會(huì)加 1,rt_tick 的值表示了系統(tǒng)從啟動(dòng)開始總共經(jīng)過的時(shí)鐘節(jié)拍數(shù),即系統(tǒng)時(shí)間。此外,每經(jīng)過一個(gè)時(shí)鐘節(jié)拍時(shí),都會(huì)檢查當(dāng)前線程的時(shí)間片是否用完,以及是否有定時(shí)器超時(shí)。

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

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

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

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

二、軟件定時(shí)器

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

1、開啟軟件定時(shí)宏

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

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

2、軟件定時(shí)器工作機(jī)制

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

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

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

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

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

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

注意:所有定時(shí)器在定時(shí)超時(shí)后都會(huì)從定時(shí)器鏈表中被移除,而周期性定時(shí)器會(huì)在它再次啟動(dòng)時(shí)被加入定時(shí)器鏈表。

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

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

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

(1)入口參數(shù)

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

(2)返回值:

RT_NULL:創(chuàng)建失?。ㄍǔ?huì)由于系統(tǒng)內(nèi)存不夠用而返回 RT_NULL)定時(shí)器的句柄:定時(shí)器創(chuàng)建成功時(shí)返回定時(shí)句柄。

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

1#defineRT_TIMER_FLAG_ONE_SHOT0x0/**

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

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

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

timer:定時(shí)器句柄,指向要?jiǎng)h除的定時(shí)器。

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

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

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

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

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

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

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

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

1rt_err_trt_timer_detach(rt_timer_ttimer);

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

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

(2)返回值:

RT_EOK:脫離成功。

7、啟動(dòng)軟件定時(shí)器

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

1rt_err_trt_timer_start(rt_timer_ttimer);

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

timer:定時(shí)器句柄,指向要啟動(dòng)的定時(shí)器控制塊。

(2)返回值:

RT_EOK:啟動(dòng)成功。

8、停止軟件定時(shí)器

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

1rt_err_trt_timer_stop(rt_timer_ttimer);

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

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

(2)返回值:

RT_EOK:成功停止定時(shí)器。RT_ERROR:timer 已經(jīng)處于停止?fàn)顟B(tài)。。

9、控制定時(shí)器

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

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

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

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

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

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

(3)返回值:

RT_EOK:成功

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

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

1、實(shí)現(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ù)功能:軟件定時(shí)timer1回調(diào)函數(shù) 26輸入?yún)?shù):parameter:回調(diào)函數(shù)的入口參數(shù),當(dāng)定時(shí)器超時(shí), 27調(diào)用回調(diào)函數(shù)會(huì)把這個(gè)參數(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í)器的計(jì)數(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ù)功能:軟件定時(shí)timer1動(dòng)態(tài)創(chuàng)建函數(shù) 45輸入?yún)?shù):無 46返回值:無 47備注:無 48**************************************************************/ 49voidrt_sw_timer1(void) 50{ 51/*動(dòng)態(tài)創(chuàng)建軟件定時(shí)器,周期執(zhí)行*/ 52timer1=rt_timer_create("timer1", 53rt_sw_timer1_callback, 54RT_NULL, 555000,/*周期為5000個(gè)時(shí)鐘節(jié)拍*/ 56RT_TIMER_FLAG_SOFT_TIMER|RT_TIMER_FLAG_PERIODIC);/*軟件定時(shí)器,周期執(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)建并啟動(dòng)key線程 91輸入?yún)?shù):無 92返回值:無 93備注:無 94**************************************************************/ 95voidkey_start(void) 96{ 97rt_thread_tkey_thread=RT_NULL;; 98 99/*動(dòng)態(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)先級(jí)*/10550);/*50個(gè)時(shí)鐘節(jié)拍*/106/*創(chuàng)建KEY線程成功,則啟動(dòng)線程*/107if(key_thread!=RT_NULL)108{109rt_thread_startup(key_thread);110}111}

2、觀察FinSH

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

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

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

四、軟件定時(shí)器設(shè)計(jì)注意事項(xiàng)

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

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

    關(guān)注

    23

    文章

    3255

    瀏覽量

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

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62864
  • 時(shí)鐘管理
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8361

原文標(biāo)題:社區(qū)新人的RT-Thread學(xué)習(xí)筆記2——時(shí)鐘管理

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

    請(qǐng)問下rt-thread是否有更高定時(shí)器對(duì)象的實(shí)現(xiàn)

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

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

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

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

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

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

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

    STM32定時(shí)器-基本定時(shí)器

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

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

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

    RT-Thread學(xué)習(xí)筆記 -- 時(shí)鐘管理

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

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

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

    定時(shí)器工作方式介紹

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