基于ARM9和μC/OSII的多頻道數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
3.3 針對(duì)外設(shè)的時(shí)間優(yōu)化
針對(duì)命令掃描和解析任務(wù),將其設(shè)置為中斷方式,在檢測(cè)到有用戶命令輸入時(shí)發(fā)生中斷,在中斷里對(duì)用戶命令進(jìn)行解析、分析、提取和處理。在中斷下半部分對(duì)命令進(jìn)行廣播式發(fā)布,發(fā)布到各個(gè)采樣任務(wù)函數(shù)使其立即刷新執(zhí)行。因?yàn)橛脩艄ぷ鞣绞礁淖儯钏⑿骂l率并不高而且任務(wù)量不大,所以完全可以利用中斷的快速處理來(lái)實(shí)現(xiàn)這種功能。
圖4 顯示任務(wù)工作原理圖
在處理完命令掃描和采樣任務(wù)之后,影響整個(gè)系統(tǒng)性能的就剩下上位機(jī)和下位機(jī)顯示部分了。顯示任務(wù)工作原理如圖4所示,利用μC/OSII系統(tǒng)提供的消息隊(duì)列對(duì)顯示部分進(jìn)行改善。分別建立兩個(gè)長(zhǎng)度為16的消息隊(duì)列和內(nèi)存塊鏈表,數(shù)據(jù)提交任務(wù)從空閑內(nèi)存池中得到可用內(nèi)存塊之后將本任務(wù)要顯示的數(shù)據(jù)存入該內(nèi)存塊,此時(shí)該內(nèi)存就變成了帶有數(shù)據(jù)的待顯示數(shù)據(jù)塊。而后將該內(nèi)存塊的地址以消息的形式注冊(cè)在顯示消息隊(duì)列上。消息隊(duì)列的長(zhǎng)度設(shè)置為16,雖然這里只有12個(gè)任務(wù)會(huì)發(fā)送消息給消息隊(duì)列,但在實(shí)時(shí)多任務(wù)程序中,各個(gè)任務(wù)的運(yùn)行是隨機(jī)的,消息隊(duì)列在一段時(shí)間內(nèi)得到的消息個(gè)數(shù)是個(gè)不定值,所以留出4個(gè)空位作為裕度。而且設(shè)置初始值為16的計(jì)數(shù)信號(hào)量來(lái)保護(hù)消息隊(duì)列,數(shù)據(jù)提交任務(wù)在提交數(shù)據(jù)之前先檢測(cè)該信號(hào)量,如該信號(hào)量有效就可以發(fā)送信號(hào),如信號(hào)量無(wú)效則需等待,直到有可用信號(hào)位時(shí)方可將信號(hào)發(fā)出。在外部硬件操作端,由外部發(fā)送任務(wù)將消息隊(duì)列中的消息按照固定速率發(fā)送到外部信號(hào)線上。
這樣設(shè)計(jì),消息隊(duì)列就相當(dāng)于一個(gè)緩沖區(qū),使得所有提交任務(wù)都可以向這個(gè)緩沖區(qū)發(fā)送待顯示數(shù)據(jù),有效地避免了多個(gè)任務(wù)爭(zhēng)用一個(gè)外圍設(shè)備而引起的死鎖、競(jìng)爭(zhēng)冒險(xiǎn)等問(wèn)題。同時(shí)減少了任務(wù)數(shù)量,減少了任務(wù)切換的次數(shù),充分利用了系統(tǒng)時(shí)間,提高了系統(tǒng)性能。
3.4 關(guān)鍵區(qū)保護(hù)
多任務(wù)設(shè)計(jì)中每個(gè)任務(wù)在任何時(shí)刻都可能被其他任務(wù)打斷,必須充分考慮代碼的安全性、可重入性、可靠性、饑餓、互鎖、死鎖等情況。[3]
為了避免上述情況,任務(wù)間消息發(fā)送和傳遞時(shí)以及在數(shù)據(jù)采樣時(shí)對(duì)相應(yīng)函數(shù)體進(jìn)行關(guān)鍵區(qū)保護(hù),在這些函數(shù)運(yùn)行的時(shí)候禁止中斷和任務(wù)調(diào)度,以保證數(shù)據(jù)傳遞和數(shù)據(jù)采樣的絕對(duì)正確性和系統(tǒng)運(yùn)行的絕對(duì)安全性。
4 極限頻率測(cè)定及總結(jié)
上位機(jī)超級(jí)終端接收到的極限頻率測(cè)試結(jié)果如圖5所示。
圖5 極限頻率測(cè)量結(jié)果
分別測(cè)試了高頻段、中頻段和低頻段的極限頻率,結(jié)果在CPU使用率80%~90%的情況下測(cè)定。該系統(tǒng)成功實(shí)現(xiàn)了智能化設(shè)計(jì)和優(yōu)先級(jí)動(dòng)態(tài)調(diào)度、系統(tǒng)參數(shù)動(dòng)態(tài)設(shè)置等功能,達(dá)到了設(shè)計(jì)指標(biāo)。
評(píng)論