互聯(lián)網(wǎng)技術(shù)
責(zé)任編輯:niconise
2012-03-19
摘要:2利用μC/OS任務(wù)調(diào)度算法實(shí)現(xiàn)嵌入式數(shù)據(jù)管理在低端的嵌入式應(yīng)用中,數(shù)據(jù)管理的主要功能就是數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)刪除。傳統(tǒng)的做法是對(duì)數(shù)據(jù)存儲(chǔ)空間按地址順序編號(hào),數(shù)據(jù)存儲(chǔ)與刪除均根據(jù)編號(hào)操作,每個(gè)編號(hào)的存儲(chǔ)空間還提供了標(biāo)志位,用于判斷該空間是否已被占用。這種方法有一個(gè)很大的弊端:多次刪除后會(huì)出現(xiàn)存儲(chǔ)空間碎片,這造成后續(xù)操
2 利用μC/OS任務(wù)調(diào)度算法實(shí)現(xiàn)嵌入式
數(shù)據(jù)管理在低端的嵌入式應(yīng)用中,數(shù)據(jù)管理的主要功能就是數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)刪除。傳統(tǒng)的做法是對(duì)數(shù)據(jù)存儲(chǔ)空間按地址順序編號(hào),數(shù)據(jù)存儲(chǔ)與刪除均根據(jù)編號(hào)操作,每個(gè)編號(hào)的存儲(chǔ)空間還提供了標(biāo)志位,用于判斷該空間是否已被占用。這種方法有一個(gè)很大的弊端:多次刪除后會(huì)出現(xiàn)存儲(chǔ)空間碎片,這造成后續(xù)操作中查找空閑空間耗時(shí)較長(zhǎng),且存儲(chǔ)量越大,這個(gè)現(xiàn)象越嚴(yán)重,大大降低了數(shù)據(jù)管理操作的效率。有些程序員為了解決這個(gè)弊端對(duì)刪除操作只提供刪除所有記錄的功能,不提供單獨(dú)刪除某個(gè)記錄的功能,但這顯然犧牲了產(chǎn)品的易用性。本文利用μC/OS任務(wù)調(diào)度算法實(shí)現(xiàn)嵌入式數(shù)據(jù)管理,可有效解決以上問題。
2.1 基本思想
利用μC/OS任務(wù)調(diào)度算法實(shí)現(xiàn)嵌入式數(shù)據(jù)管理的基本思想是:將μC/OS中的“任務(wù)優(yōu)先級(jí)”與數(shù)據(jù)管理的“記錄號(hào)”對(duì)應(yīng),將“任務(wù)就緒態(tài)”與“存儲(chǔ)空間空狀態(tài)”(注意,不是存儲(chǔ)空間滿狀態(tài))對(duì)應(yīng),將“任務(wù)空閑態(tài)”與“存儲(chǔ)空間滿狀態(tài)”對(duì)應(yīng),將“使任務(wù)進(jìn)入就緒態(tài)”與“數(shù)據(jù)刪除”對(duì)應(yīng),將“使任務(wù)進(jìn)入空閑態(tài)”與“數(shù)據(jù)存儲(chǔ)”對(duì)應(yīng),將“查找當(dāng)前處于就緒態(tài)的較高優(yōu)先級(jí)任務(wù)”與“查找當(dāng)前空閑存儲(chǔ)空間”對(duì)應(yīng)。即在實(shí)際應(yīng)用中,數(shù)據(jù)存儲(chǔ)前先根據(jù)μC/OS中的“查找當(dāng)前處于就緒態(tài)的較高優(yōu)先級(jí)任務(wù)”的方法查找目前優(yōu)先級(jí)較高的空閑存儲(chǔ)空間,獲得相應(yīng)記錄號(hào),然后在數(shù)據(jù)存儲(chǔ)后根據(jù)μC/OS中的“使任務(wù)進(jìn)入空閑態(tài)”的方法使相應(yīng)記錄的存儲(chǔ)空間置為“滿”狀態(tài);數(shù)據(jù)刪除后根據(jù)μC/OS中的“使任務(wù)進(jìn)入就緒態(tài)”的方法使相應(yīng)記錄的存儲(chǔ)空間置為“空”狀態(tài)。顯然,該方法較傳統(tǒng)方法有兩大優(yōu)點(diǎn):查找空閑存儲(chǔ)空間的速度遠(yuǎn)高于傳統(tǒng)方法,且查找時(shí)間為常數(shù),即查找時(shí)間與記錄數(shù)無關(guān)(傳統(tǒng)方法的查找時(shí)間隨記錄數(shù)遞增);不會(huì)出現(xiàn)存儲(chǔ)空間碎片,因?yàn)楸痉椒ò磧?yōu)先級(jí)存儲(chǔ)數(shù)據(jù),刪除的存儲(chǔ)空間的優(yōu)先級(jí)肯定高于未使用的存儲(chǔ)空間,則在后續(xù)存儲(chǔ)操作中會(huì)將其優(yōu)先用于存儲(chǔ),從而也就避免了存儲(chǔ)空間碎片的出現(xiàn)。
2.2 算法的改進(jìn)
μC/OS的最大任務(wù)數(shù)為64,這意味著直接采用μC/OS任務(wù)調(diào)度算法實(shí)現(xiàn)的數(shù)據(jù)管理的最大記錄數(shù)也僅為64個(gè),這顯然不適用于多數(shù)應(yīng)用場(chǎng)合,因此需對(duì)算法進(jìn)行改進(jìn)。本方法引入“頁(yè)”的概念,即每64個(gè)記錄為1頁(yè),數(shù)據(jù)存儲(chǔ)前先查找包含空記錄的頁(yè)號(hào),然后在該頁(yè)中查找空記錄。查找包含空記錄的頁(yè)號(hào)的方法與查找空記錄的方法相同(即都根據(jù)μC/OS中的“查找當(dāng)前處于就緒態(tài)的較高優(yōu)先級(jí)任務(wù)”的方法查找),因此最大記錄數(shù)為64記錄/頁(yè)×64頁(yè)=4096個(gè)記錄。依此類推,可繼續(xù)擴(kuò)大存儲(chǔ)記錄數(shù)。為了理解方便,下文代表記錄空閑狀態(tài)和頁(yè)內(nèi)記錄號(hào)的全局變量定義為OSRdyTbl[64][8]、OSRdyGrp[64]和prio,代表頁(yè)空閑狀態(tài)和頁(yè)號(hào)的全局變量定義為OSRdyPage、OSRdyPageTbl[8]和PrioPage,代表記錄在整個(gè)存儲(chǔ)空間的序號(hào)定義為RecordNo(則RecordNo = PrioPage×64+prio)。
2.3 嵌入式數(shù)據(jù)管理主要步驟的實(shí)現(xiàn)
2.3.1 數(shù)據(jù)初始化
在嵌入式系統(tǒng)剛運(yùn)行時(shí),所有記錄應(yīng)為空狀態(tài),因此需將代表記錄空閑狀態(tài)和頁(yè)空閑狀態(tài)的全局變量OSRdyTbl[]、OSRdyGrp、OSRdyPageTbl[]和OSRdyPage的所有字節(jié)均初始化為0xff(因?yàn)椤?”代表空閑)。[1] [2] [3] [4]
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
延伸閱讀
更多精彩內(nèi)容請(qǐng)關(guān)注
通信工程師微信公眾號(hào)
通信工程師備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題