2 對(duì)“時(shí)間觸發(fā)編程模式”的改進(jìn)
根據(jù)多年嵌入式系統(tǒng)編程的經(jīng)驗(yàn),通常嵌入系統(tǒng)的任務(wù)可以劃分成3種類型:
?、偌皶r(shí)型任務(wù)。這類任務(wù)是事件觸發(fā)型的,一旦事件發(fā)生,系統(tǒng)必須在限定的時(shí)間內(nèi)進(jìn)行響應(yīng),對(duì)這類任務(wù),最自然的方法就是使用中斷來(lái)完成,即定義成“前后臺(tái)方式”中的后臺(tái)任務(wù)。
②周期型任務(wù)。這類任務(wù)是時(shí)間觸發(fā)式周期型的,系統(tǒng)必須保證在指定的周期內(nèi)執(zhí)行任務(wù),“時(shí)間觸發(fā)編程模式”可以很好地滿足這類任務(wù)的需求。
?、郾尘靶腿蝿?wù)。這類任務(wù)是非實(shí)時(shí)型的,實(shí)時(shí)性不是非常重要,系統(tǒng)在運(yùn)行過(guò)程中可隨時(shí)中斷這類任務(wù)以便執(zhí)行前兩類任務(wù),系統(tǒng)只要能充分利用資源盡最大可能快速完成這類任務(wù)即可,這類任務(wù)最適合定義成“前后臺(tái)方式”中的前臺(tái)任務(wù)。
根據(jù)以上任務(wù)分類,對(duì)“時(shí)間觸發(fā)編程模式”的改進(jìn)可概括成以下需求:
◆任務(wù)分3類,1類任務(wù)優(yōu)先級(jí)最高,3類任務(wù)優(yōu)先級(jí)最低;
◆高優(yōu)先級(jí)的任務(wù)可中斷低優(yōu)先級(jí)任務(wù)的執(zhí)行,同級(jí)的任務(wù)之間不可相互剝奪;
◆實(shí)際沒(méi)計(jì)中為提高系統(tǒng)的可預(yù)測(cè)性,應(yīng)盡量減少1類任務(wù)的數(shù)量及1類任務(wù)的執(zhí)行時(shí)間;
◆為降低系統(tǒng)資源的占用,系統(tǒng)不給任務(wù)劃分單獨(dú)的堆??臻g。
以上改進(jìn)的本質(zhì)是設(shè)計(jì)3個(gè)優(yōu)先級(jí)的簡(jiǎn)單的任務(wù)調(diào)度機(jī)制,高優(yōu)先級(jí)的任務(wù)可中斷低優(yōu)先級(jí)的任務(wù),同優(yōu)先級(jí)的任務(wù)之間不能相互剝奪,該調(diào)度機(jī)制不為每個(gè)單獨(dú)的任務(wù)保存任務(wù)上下文和單獨(dú)的堆棧,這樣可以減少該編程模式對(duì)系統(tǒng)資源的需求。
可剝奪式RTOS中的一個(gè)高優(yōu)先級(jí)任務(wù)中斷一個(gè)低優(yōu)先級(jí)的任務(wù)時(shí),會(huì)保存好低優(yōu)先級(jí)任務(wù)的上下文并把該低優(yōu)先級(jí)任務(wù)的局部變量保存在本任務(wù)單獨(dú)的堆棧中,如果系統(tǒng)不給任務(wù)分配單獨(dú)的堆棧,如何保證高優(yōu)先級(jí)任務(wù)退出后,低優(yōu)先級(jí)任務(wù)執(zhí)行環(huán)境的恢復(fù)呢?
對(duì)這個(gè)問(wèn)題,可以借鑒中斷的處理機(jī)制用以下辦法予以解決:
?、僭谙到y(tǒng)中設(shè)計(jì)一個(gè)定時(shí)中斷函數(shù),該函數(shù)的功能就是執(zhí)行周期性任務(wù)的調(diào)度,該定時(shí)中斷在所有中斷中優(yōu)先級(jí)最低。
?、谠谙到y(tǒng)中設(shè)計(jì)另一個(gè)定時(shí)中斷函數(shù),該函數(shù)的功能是刷新周期型任務(wù)的任務(wù)管理隊(duì)列,為任務(wù)調(diào)度提供支持,本定時(shí)中斷函數(shù)的優(yōu)先級(jí)在系統(tǒng)中次低。
?、壑芷谛腿蝿?wù)就是一個(gè)函數(shù),該函數(shù)入口的第一個(gè)操作是開(kāi)中斷,允許任務(wù)執(zhí)行期間被中斷以便響應(yīng)及時(shí)型任務(wù)。
④背景型任務(wù)就是在主函數(shù)超級(jí)循環(huán)中執(zhí)行的代碼,該代碼可隨時(shí)被及時(shí)型和周期型任務(wù)中斷,當(dāng)系統(tǒng)沒(méi)有及時(shí)型任務(wù)和周期型任務(wù)時(shí)才循環(huán)執(zhí)行背景型任務(wù)的代碼。
通過(guò)以上措施,“改進(jìn)型時(shí)間觸發(fā)編程模式”的程序結(jié)構(gòu)如下:
結(jié)語(yǔ)
使用“改進(jìn)型時(shí)間觸發(fā)編程模式”進(jìn)行小型嵌入式系統(tǒng)編程,就像使用RTOS進(jìn)行編程一樣,設(shè)計(jì)者規(guī)劃好任務(wù)后,就可以專心于每個(gè)任務(wù)的設(shè)計(jì),任務(wù)對(duì)處理器時(shí)間的占用可以由系統(tǒng)統(tǒng)一管理,減少任務(wù)之間的耦合,使產(chǎn)品的程序設(shè)計(jì)和改動(dòng)都變得簡(jiǎn)潔清楚。使用該編程模式很好地解決了譬裝式智能配電儀表所面臨的復(fù)雜的設(shè)計(jì)問(wèn)題,證明該方法簡(jiǎn)單有效。目前該設(shè)計(jì)模式僅僅設(shè)計(jì)了任務(wù)調(diào)度器,任務(wù)間的變量傳遞還需要使用全局變量,如果能加入信號(hào)量和消息機(jī)制,那么該模式將更加完善。
評(píng)論