博客專欄

EEPW首頁(yè) > 博客 > RT-Thread線程與時(shí)鐘定時(shí)器管理

RT-Thread線程與時(shí)鐘定時(shí)器管理

發(fā)布人:15695104076 時(shí)間:2023-06-16 來(lái)源:工程師 發(fā)布文章

第一天

我今天學(xué)習(xí)的是RT—Thread線程和時(shí)鐘定時(shí)器管理。

系統(tǒng)中總共存在兩類線程,分別是系統(tǒng)線程和用戶線程,系統(tǒng)線程是由 RT-Thread 內(nèi)核創(chuàng)建的線程,用戶線程是由應(yīng)用程序創(chuàng)建的線程,而RT-Thread 的線程調(diào)度器是搶占式的。

線程具有上下文切換、保護(hù)線程中局部變量、函數(shù)調(diào)用上下文保存等作用。當(dāng)線程剛開(kāi)始創(chuàng)建還沒(méi)開(kāi)始運(yùn)行時(shí)就處于初始狀態(tài);在初始狀態(tài)下,線程不參與調(diào)度。此狀態(tài)在 RT-Thread 中的宏定義為RT_THREAD_INIT。在就緒狀態(tài)下,線程按照尤先級(jí)排隊(duì)等待被執(zhí)行;一旦當(dāng)前線程運(yùn)行完畢讓出處理器,操作系統(tǒng)會(huì)馬上尋找最高優(yōu)先級(jí)的就緒態(tài)線程運(yùn)行。此狀態(tài)在 RT-Thread 中的宏定義為 RT_THREAD_READY線程當(dāng)前正在運(yùn)行在單核系統(tǒng)中,只有rthread_ self0 函數(shù)返回的線程處于運(yùn)行狀態(tài);在多核系統(tǒng)中,可能就不止這一個(gè)線程處于運(yùn)行狀態(tài)。此狀態(tài)在 RT-Thread 中的宏定義為 RT_THREAD_RUNNING也稱阻塞態(tài)。可能因?yàn)橘Y源不可用 而掛起等待,或式程主動(dòng)了延時(shí)一段時(shí)間而掛起。在掛起狀態(tài)下,線程不參與調(diào)度。此狀態(tài)在FT-Thread 中的宏定義為 RT_THREAD_SUSPEND當(dāng)線程運(yùn)行結(jié)束時(shí)將處干關(guān)閉狀態(tài)。關(guān)閉狀態(tài)的線程不參與線程的調(diào)度。此狀態(tài)在 RT-Thread 中的宏定義為 RT_THREAD _CLOSE。

在系統(tǒng)啟動(dòng)時(shí),系統(tǒng)會(huì)創(chuàng)建 main 線程,它的入口函數(shù)為 main_thread_entry(),用戶的應(yīng)用入口函數(shù) main() 就是從這里真正開(kāi)始的,系統(tǒng)調(diào)度器啟動(dòng)后,main 線程就開(kāi)始運(yùn)行。

RT-Thread 中,定時(shí)器分為硬件定時(shí)器和軟件定時(shí)器,觸發(fā)方式分為單次觸發(fā)和周期觸發(fā)。我們?cè)趧?chuàng)建定時(shí)器時(shí),把定時(shí)器指定成SOFT_TIMER的方式,這樣可以使得定時(shí)器超時(shí)函數(shù)完全運(yùn)行在timer系統(tǒng)線程上下文環(huán)境中。如果系統(tǒng)在初始化時(shí)需要使用SOFT_TIMER特性,需要在系統(tǒng)配置中打開(kāi)RT_USING_TIMER_SOFT宏定義,那么調(diào)用rt_system_timer_thread_init函數(shù)就可以啟動(dòng)timer系統(tǒng)線程。這里值得注意的是,SOFT_TIMER定時(shí)器的精度由RT_TIMER_TICK_PER_SECOND定義的值所決定,這個(gè)值必須是OS tick的整數(shù)倍。

硬件定時(shí)器因?yàn)槭窃谥袛嘀袌?zhí)行,所以對(duì)超時(shí)函數(shù)有很強(qiáng)的限制:1.時(shí)間不能太久2,不能有掛起、等待操作3.不能申請(qǐng)動(dòng)態(tài)內(nèi)存、釋放動(dòng)態(tài)內(nèi)存。軟件定時(shí)器因?yàn)槭窃诰€程中執(zhí)行,所以要求就比較寬泛一點(diǎn):1.時(shí)間也要短2,不允許有阻塞掛起、死循環(huán)3,不能影響其他超時(shí)函數(shù)的下一次回調(diào),也就是時(shí)間短的標(biāo)準(zhǔn)。使用硬件定時(shí)器,在時(shí)基更新的時(shí)候,查詢的定時(shí)器包含線程的內(nèi)置定時(shí)器和用戶定義的定時(shí)器,它們都掛在硬件定時(shí)器列表上,而且特點(diǎn)是:所有線程的內(nèi)置定時(shí)器的回調(diào)函數(shù)都是一個(gè)函數(shù),而用戶自定義的定時(shí)器的回調(diào)函數(shù)由用戶自定義。在每次系統(tǒng)滴答中斷進(jìn)行線程恢復(fù)和調(diào)度是通過(guò)調(diào)用線程內(nèi)置的定時(shí)器的超時(shí)函數(shù)實(shí)現(xiàn)的。拋開(kāi)一切不說(shuō),滴答中斷里是查詢定時(shí)器,有超時(shí)的定時(shí)器就調(diào)用其超時(shí)函數(shù),當(dāng)這個(gè)定時(shí)器是線程內(nèi)置的定時(shí)器,它這個(gè)超時(shí)函數(shù)就是恢復(fù)線程和執(zhí)行調(diào)度。如果這個(gè)定時(shí)器是用戶自己開(kāi)的硬件定時(shí)器時(shí),其調(diào)用的超時(shí)函數(shù)就是用戶自己寫的。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: RT-Threa

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉