<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

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

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

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

第一天

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

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

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

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

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

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


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



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

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>