日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]引言在嵌入式實時操作系統(tǒng)(RTOS)中,任務可通過調用延時函數(比如μC/OS中的OSTimeDly() 函數)將自己延時掛起一段時間。任務在延時的過程中會釋放CPU使用權,也就是說,

引言

在嵌入式實時操作系統(tǒng)(RTOS)中,任務可通過調用延時函數(比如μC/OS中的OSTimeDly() 函數)將自己延時掛起一段時間。任務在延時的過程中會釋放CPU使用權,也就是說,延時的任務不占用寶貴的CPU資源。延時的任務由時鐘節(jié)拍服務跟蹤管理。當任務延時結束并準備運行時,時鐘節(jié)拍服務會使該任務恢復運行。時鐘節(jié)拍服務定期運行,其運行由周期的時鐘節(jié)拍中斷觸發(fā),而時鐘節(jié)拍中斷可由硬件定時器產生。

在μC/OS—III中,時鐘節(jié)拍服務是在時鐘節(jié)拍中斷服務程序中完成的,每次時鐘節(jié)拍服務都會遍歷整個任務鏈表,遞減所有延時任務的延時計數器。當任務數目較多時,時鐘節(jié)拍服務處理時間很長,會造成中斷延遲時間和任務延遲時間都變得很長,影響系統(tǒng)的實時性。

在μC/OS—III中,時鐘節(jié)拍服務不再在時鐘節(jié)拍中斷服務程序中完成,而是放到一個時鐘節(jié)拍任務中完成。而且,通過采用啥希散列表機制來管理延時任務,每次時鐘節(jié)拍服務只需要處理極少數的延時任務,從而大大減少了時鐘節(jié)拍服務花費的時間,提高了系統(tǒng)的實時性。

另外,在μC/OS系列RTOS中,時鐘節(jié)拍服務除了會跟蹤延時的任務,還會跟蹤那些指定了超時時限的等待任務。也就是說,當指定的超時時限結束時,即使任務等待的事件沒有發(fā)生,時鐘節(jié)拍服務也會使該任務恢復運行。

1 μC/OS—II中的時鐘節(jié)拍管理機制

在 μC/OS—II中,每次時鐘節(jié)拍服務都會遍歷整個任務鏈表,依次處理各個任務。如果當前處理的任務的延時計數為0,那么跳過該任務,繼續(xù)處理下一個任務;否則,把當前任務的延時計數減1,然后,判斷減1后的延時計數是否為0。如果為0,表示任務延時結束了或等待超時了。由于μC/OS-Ⅱ允許其他任務調用OSTaskSuspend()函數強制掛起正在延時的任務,在這種情況下,不僅需要等到任務延時結束,還需要由其他任務調用 OSTaskResume()函數解除該任務的強制掛起狀態(tài),該任務才能進入就緒態(tài)。因此,在延時計數遞減為0的時候,還需要判斷任務是否被強制掛起。只有任務沒有被強制掛起,才能使該任務進入就緒態(tài);否則,把延時計數設置為1,保持任務的延時狀態(tài)。μC/OS—II時鐘節(jié)拍服務函數的主要代碼和注釋如下:

 

在μC/OS—II中,由于每次時鐘節(jié)拍服務都要遍歷所有任務,因此,在任務數目較多時,其執(zhí)行時間可能很長。另外,由于時鐘節(jié)拍服務函數OSTimeTick()由時鐘節(jié)拍中斷服務程序OSTicidSR()調用執(zhí)行,因此當OSTimeTick()執(zhí)行時間很長時,時鐘節(jié)拍中斷服務程序的執(zhí)行時間也很長。在中斷服務程序執(zhí)行時,所有任務都無法執(zhí)行,在這種情況下,系統(tǒng)的實時性會很差。

2 μC/OS-III中的時鐘節(jié)拍管理機制

針對μC/OS—II時鐘節(jié)拍服務的問題,μC/OS—III主要做了兩點改進:①用時鐘節(jié)拍任務來做時鐘節(jié)拍處理;②用時鐘節(jié)拍輪盤來分類管理延時任務以及指定超時時限的等待任務。

2.1 時鐘節(jié)拍任務

在 μC/OS—III中,增加了一個系統(tǒng)任務,即時鐘節(jié)拍任務OS_TickTask()。該任務是μC/OS-III中兩個總是會創(chuàng)建的系統(tǒng)任務之一。時鐘節(jié)拍任務負責處理延時任務和指定超時時限的等待任務,這樣,μC/OS—III就把時鐘節(jié)拍的處理工作放到任務級代碼中完成了。時鐘節(jié)拍中斷服務程序和時鐘節(jié)拍任務之間的關系如圖1所示。

 

不論在μC/OS—II還是在μC/OS—III中,都需要一個硬件定時器(或其他能產生周期性中斷的外設)來產生幾十到上千赫茲的時鐘節(jié)拍中斷。時鐘節(jié)拍中斷的具體頻率取決于所用的處理器的性能以及應用需求。時鐘節(jié)拍中斷頻率越高,系統(tǒng)的延時精度越高,對處理器的處理能力要求也越高。

每次產生時鐘節(jié)拍中斷,CPU都會跳轉到時鐘節(jié)拍中斷服務程序(ISR)中執(zhí)行。時鐘節(jié)拍ISR會調用 OSTimeTick()函數。前面提到過,μC /OS—II的時鐘節(jié)拍ISR也會調用OSTimeTick()函數,在這一點上μC/OS—II和μC/OS—III看起來沒有區(qū)別,但實際上 μC/OS—III中的OS TimeTick()函數與μC/OS—II中的OSTimeTick()函數有很大區(qū)別。μC/OS—III中的OSTimeTick()函數主要完成如下操作:向時鐘節(jié)拍任務發(fā)信號、調用OS_SchedRoundRobin()函數,以及向定時器任務發(fā)信號等。其中,后兩點與時鐘節(jié)拍的管理無關,這里不詳細介紹。精簡的OSTimeTick()函數如下面這段代碼所示,其中只保留與時鐘節(jié)拍管理相關的代碼。

在 μC/OS—III中,OSTimeTick()函數不需要遍歷任務鏈表,只是通過OSTaskSemPost()函數向時鐘節(jié)拍任務發(fā)信號。而時鐘節(jié)拍任務絕大部分時間內都處于等待該信號的狀態(tài),每次收到該信號時,時鐘節(jié)拍任務會恢復運行,調用OS_TiekListUpdate()函數處理延時的任務,然后再次進入等待該信號的狀態(tài),其代碼如下:

 

 

相比μC/OS—II的時鐘節(jié)拍管理方式,μC/OS—III使用了專門的時鐘節(jié)拍任務來處理時鐘節(jié)拍,可大大減少時鐘節(jié)拍中斷服務程序的執(zhí)行時間。

2.2 延時任務管理

μC/OS—III為了提高時鐘節(jié)拍的處理速度,采用了哈希散列表機制來管理所有正在延時的任務和指定了超時時限的等待任務。這些任務都記錄在時鐘節(jié)拍列表(Tick List)中。時鐘節(jié)拍列表包含兩部分:一個稱為時鐘節(jié)拍輪盤的數組(OSCfg_TickWheel[])和一個時鐘節(jié)拍計數器 (OSTickCtr),如圖2所示。

 

時鐘節(jié)拍列表中的每個任務都有一個延時結束時刻或等待超時時限,假設為TM。比如,一個任務在時鐘節(jié)拍計數器數值為OSTickCtr時調用OSTimeDly()延時dly個時鐘節(jié)拍,那么該任務的延時結束時刻TM就等于OSTickCtr+dly。然后,用 TM和時鐘節(jié)拍輪盤的表項個數(OS_CFG_TI CK_WHEEL_SIZE)做取模運算,就可以得到一個余數I(I=TM%OS_CFG_TICK_WHEEL_SIZE)。那么,該延時任務就會放到時鐘節(jié)拍輪盤第1個表項指向的任務鏈表中。

時鐘節(jié)拍輪盤的每個表項都有3個成員:“.NbrEntriesMax”、“.NbrEntries” 和“.FirstPtr”。其中,“.FirstPtr”指向該表項對應的任務鏈表,所有分配到該表項的延時任務或指定超時時限的等待任務都會放到該任務鏈表中。“.NbrEntries”和“.NbrEntries Max”分別記錄任務鏈表中的當前任務數目和歷史最大任務數目。在任務鏈表中,任務按照延時結束時刻或超時時限排序,結束時刻早的任務排在鏈表的前面。[!--empirenews.page--]

通過采用哈希散列表機制,在每次時鐘節(jié)拍服務時,只需要處理時鐘節(jié)拍輪盤的某個特定表項所指向的任務鏈表,因為恰好在該時鐘節(jié)拍服務時延時結束或等待超時的任務都一定處于該表項所指向的任務鏈表中,而該表項的索引號就等于OSTickCtr%OS_CFG_TICK_WHEEL_SIZ E。另外,由于各個表項指向的任務鏈表中的任務是按照延時結束時刻和等待超時時限的順序進行排序的,這樣,在處理當前任務鏈表時,就可以從位于鏈表頭部的任務開始判斷任務延時結束時刻或等待超時時限是否等于OSTickCtr的當前值。如果等于,說明該任務延時結束或等待超時了,然后,再判斷下一個任務;如果不等于,說明該任務延時沒有結束或等待沒有超時,同時也說明,排在鏈表后面的任務都不可能延時結束或等待超時,因此,可以立即結束對任務鏈表的處理。

由于采用了哈希散列表機制,μC/OS—III中的時鐘節(jié)拍服務在大部分情況下只需要判斷極少數任務的延時結束時刻或超時時限,看其是否等于時鐘節(jié)拍計數器的當前值,這相比μC/OS—II中需要遍歷整個任務鏈表的時鐘節(jié)拍服務,顯然效率要高很多。

結語

μC/OS —II中的時鐘節(jié)拍服務有兩個不足之處:一是需要遍歷整個任務鏈表,二是需要在時鐘節(jié)拍中斷服務程序中進行時鐘節(jié)拍的處理工作。當系統(tǒng)中任務數目較多時,會影響系統(tǒng)的實時性,這對于一個實時嵌入式操作系統(tǒng)來說是不完善的地方。在μC/OS—III中,通過增加一個時鐘節(jié)拍系統(tǒng)任務并采用哈希散列表機制,很好地解決了這兩點問題,即使在系統(tǒng)任務數目很多的時候,也可以確保系統(tǒng)的實時性。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉