經(jīng)典再續(xù):μC/OS-III
μC/OS-III相比于μC/OS-II做了很多的改進(jìn),是一款全新的內(nèi)核,在效率方面有了很大提升,并且支持任務(wù)的時(shí)間片輪轉(zhuǎn)調(diào)度,摒棄了一些不必要的內(nèi)容,如消息郵箱,對(duì)于熟悉μC/OS-II的工程師來(lái)說(shuō),上手μC/OS-III還是比較容易的,先來(lái)了解一下μC/OS-III做了哪些具體的改進(jìn)。
本文引用地址:http://cafeforensic.com/article/268018.htm一、時(shí)鐘節(jié)拍的改進(jìn)
在RTOS中,任務(wù)可通過(guò)調(diào)用延時(shí)函數(shù)(如OSTimeDly( )函數(shù))將自己延時(shí)掛起一段時(shí)間,任務(wù)在延時(shí)的過(guò)程中會(huì)釋放CPU,延時(shí)的任務(wù)不占用寶貴的CPU資源,而是由時(shí)鐘節(jié)拍服務(wù)統(tǒng)一管理,時(shí)鐘節(jié)拍服務(wù)是一個(gè)周期性運(yùn)行的任務(wù),由周期的時(shí)鐘節(jié)拍中斷觸發(fā),而時(shí)鐘節(jié)拍中斷可由硬件定時(shí)器產(chǎn)生,以此來(lái)分擔(dān)CPU的工作量。
在μC/OS-II中,時(shí)鐘節(jié)拍服務(wù)是在時(shí)鐘節(jié)拍中斷服務(wù)程序中完成的,每次時(shí)鐘節(jié)拍服務(wù)都會(huì)遍歷整個(gè)任務(wù)鏈表,依次處理每個(gè)任務(wù),如果該任務(wù)的延時(shí)計(jì)數(shù)為0,則跳過(guò)該任務(wù),如果計(jì)數(shù)非0,則進(jìn)行減1操作,并判斷減1后是否為0,為0則表明延時(shí)時(shí)間已到,使相關(guān)任務(wù)進(jìn)入就緒態(tài)。如果系統(tǒng)的任務(wù)數(shù)目較多的話(huà),時(shí)鐘節(jié)拍服務(wù)遍歷整個(gè)任務(wù)鏈表的時(shí)間較長(zhǎng),而且該服務(wù)函數(shù)在中斷中被調(diào)用,因此也會(huì)導(dǎo)致中斷執(zhí)行的時(shí)間過(guò)長(zhǎng),不符合實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)理念。
在μC/OS-III中,周期性的硬件定時(shí)器通過(guò)中斷觸發(fā)中斷服務(wù)函數(shù),在中斷服務(wù)函數(shù)中調(diào)用時(shí)鐘節(jié)拍服務(wù)函數(shù),但是該時(shí)鐘節(jié)拍服務(wù)函數(shù)不需要遍歷整個(gè)任務(wù)鏈表,只是發(fā)送一個(gè)信號(hào)量,即可結(jié)束中斷,時(shí)鐘節(jié)拍任務(wù)接收該信號(hào)量,恢復(fù)運(yùn)行,處理延時(shí)函數(shù),為了提高時(shí)鐘節(jié)拍的處理速度,還采用了哈希散列表機(jī)制來(lái)管理任務(wù),使得查找速度更加高效合理。
二、任務(wù)調(diào)度的改進(jìn)
在μC/OS-II中,任務(wù)調(diào)度是完全基于優(yōu)先級(jí)的,每個(gè)任務(wù)都有不同的優(yōu)先級(jí),不允許2個(gè)任務(wù)具有相同的優(yōu)先級(jí),并且支持的任務(wù)數(shù)量是有限制的。
在μC/OS-III中,可以支持任意數(shù)目的任務(wù)和優(yōu)先級(jí),用戶(hù)根據(jù)實(shí)際情況來(lái)定,當(dāng)然在實(shí)時(shí)操作系統(tǒng)中,要盡可能的精簡(jiǎn)任務(wù)數(shù)目,在μC/OS-III中,增加了任務(wù)的時(shí)間片輪轉(zhuǎn)調(diào)度算法,也就是說(shuō)不同的任務(wù)允許具有相同的優(yōu)先級(jí),因此,任務(wù)的數(shù)量就可以不受優(yōu)先級(jí)數(shù)量的限制了,每一個(gè)優(yōu)先級(jí)的任務(wù)數(shù)量可以有多個(gè),同一優(yōu)先級(jí)的任務(wù)根據(jù)實(shí)際需要分配執(zhí)行時(shí)間,時(shí)間到時(shí)釋放CPU,使得其它任務(wù)得以執(zhí)行,如此循環(huán)往復(fù)。除此之外,還對(duì)任務(wù)優(yōu)先級(jí)查找算法進(jìn)行了改進(jìn),在此不再詳述。
三、信號(hào)量的改進(jìn)
在多任務(wù)實(shí)時(shí)操作系統(tǒng)中,信號(hào)量是最基本最常用的機(jī)制,用來(lái)實(shí)現(xiàn)任務(wù)之間的通信和同步、任務(wù)和中斷之間的通信和同步以及對(duì)共享資源的訪問(wèn),在μC/OS-II中,提供了基本的信號(hào)量創(chuàng)建、等待和釋放等操作。
在μC/OS-III中,對(duì)信號(hào)量的使用增加了一些可選參數(shù),如非阻塞等待、釋放但不進(jìn)行任務(wù)調(diào)度等操作,具有較高的靈活性。更為方便和重要的是,在μC/OS-III中增加了任務(wù)內(nèi)嵌的信號(hào)量,用戶(hù)無(wú)需創(chuàng)建信號(hào)量便可和其它任務(wù)通信,使用起來(lái)比普通信號(hào)量更加簡(jiǎn)單高效。比如兩個(gè)任務(wù)之間的數(shù)據(jù)傳送很明確,任務(wù)A接收數(shù)據(jù)完成后,只有任務(wù)B來(lái)執(zhí)行數(shù)據(jù)的處理,也就是說(shuō)只有一個(gè)任務(wù)等待任務(wù)A的信號(hào)量,而且任務(wù)A知道要將信號(hào)量發(fā)送給哪個(gè)任務(wù),便可以使用內(nèi)嵌信號(hào)量來(lái)進(jìn)行通信和同步。
四、小結(jié)
以上僅列舉了幾點(diǎn)在μC/OS-III中比較重要的改進(jìn),μC/OS-III實(shí)時(shí)內(nèi)核無(wú)論在效率、穩(wěn)定性、用戶(hù)使用靈活性方面都做了重要的改進(jìn),是一款全新的實(shí)時(shí)內(nèi)核,詳見(jiàn)書(shū)籍《嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-III》。
評(píng)論