新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM9和μC/OSII的多頻道數據采集系統(tǒng)的智能化設計

        基于ARM9和μC/OSII的多頻道數據采集系統(tǒng)的智能化設計

        作者: 時間:2012-05-07 來源:網絡 收藏


        圖3 各個頻段內部命令

        3.1 任務優(yōu)先級設置及采樣任務優(yōu)先級動態(tài)調度

        μC/OSII操作系統(tǒng)是基于優(yōu)先級的搶占式操作系統(tǒng),所有任務必須有各自獨立且唯一的優(yōu)先級[1]。命令掃描和數據顯示分別設置為最高優(yōu)先級和最低優(yōu)先級。掃描函數的最高優(yōu)先級可以確保隨時對用戶命令進行響應,而顯示任務由于其運行速速慢,將其設置為最低優(yōu)先級。只要系統(tǒng)設計合理,適當避免低優(yōu)先級任務的饑餓現(xiàn)象,即可實現(xiàn)將用戶有效信息顯示輸出。

        內部優(yōu)先級設置規(guī)則是,低頻段、中頻段、高頻段3個頻段的任務之間優(yōu)先級依次遞減。低頻段的采樣周期明顯比高頻段長,在低頻段數據采集的空閑時間里系統(tǒng)可以順利地將CPU使用權切換給其他任務,使其他任務得到CPU使用權并執(zhí)行。每個頻段內部的各個任務的優(yōu)先級從采樣到數據存儲、數據處理、數據提交依次遞減。
        為了使得整個系統(tǒng)實現(xiàn)優(yōu)先級動態(tài)調度也可以修改其他采樣參數,在軟件設計時將所有頻段采樣任務的優(yōu)先級、采樣周期以全局變量的形式在進入操作系統(tǒng)之前進行設置,并將其定義為volatile格式分配獨立的變量存儲地址。而后設立獨立的掃描任務,來專門完成這些參數的判斷、修改、存儲和動態(tài)更新。這樣便使得系統(tǒng)除了可以按照根據采樣周期設計的初始化優(yōu)先級和初始化參數運行外,還可以依據用戶自身需要對各個頻段、各個通道的采樣任務優(yōu)先級以及采樣頻率進行設置和修改。修改完并確認后,修改任務會保存、更新當前系統(tǒng)工作參數并退出操作系統(tǒng),而后重新啟動并初始化,整個采集系統(tǒng)將按照全新的狀態(tài)開始工作。當然,在這里用戶優(yōu)先級和采樣周期設置是受限的,必須符合上文提及的優(yōu)先級規(guī)則及各個頻段對采樣周期的要求。

        3.2 任務時限設置

        為了對整個系統(tǒng)的時間調度進行優(yōu)化,首先說明幾個內部工作時間。i386體系和Linux2.5內核中操作系統(tǒng)節(jié)拍率都設置為1000 Hz[2]。在這里將μC/OSII操作系統(tǒng)調度時間OS_TICKS_PER_SEC也設置為1000,也就是說操作系統(tǒng)的任務調度以ms為單位。內核CPU工作頻率設置為400 MHz,即CPU機械周期以ns為單位。外設包括上位機命令掃描和上位機、下位機顯示部分工作都以s為單位。μC/OSII系統(tǒng)中任務切換、調度及延時都以系統(tǒng)節(jié)拍率為單位,而內部代碼的運行是以機械周期為單位。內部任務時限可以以節(jié)拍律為單位,也可以以實時時間為基準,獲得一個絕對時間差。

        單個采樣任務通道內部只有采樣任務需要時限設置。為了達到智能化,用消息隊列的等待延時替代了采樣任務時限,而該延時便是本通道的采樣周期。其他的后續(xù)任務包括內存開辟、數據處理、數據發(fā)送,都依次等待上一級任務消息,受上一級任務鉗制不設置任務時限。顯示任務時限按ms設置為絕對時間差。

        3.3 針對外設的時間優(yōu)化

        針對命令掃描和解析任務,將其設置為中斷方式,在檢測到有用戶命令輸入時發(fā)生中斷,在中斷里對用戶命令進行解析、分析、提取和處理。在中斷下半部分對命令進行廣播式發(fā)布,發(fā)布到各個采樣任務函數使其立即刷新執(zhí)行。因為用戶工作方式改變,命令刷新頻率并不高而且任務量不大,所以完全可以利用中斷的快速處理來實現(xiàn)這種功能。

        圖4 顯示任務工作原理圖

        在處理完命令掃描和采樣任務之后,影響整個系統(tǒng)性能的就剩下上位機和下位機顯示部分了。顯示任務工作原理如圖4所示,利用μC/OSII系統(tǒng)提供的消息隊列對顯示部分進行改善。分別建立兩個長度為16的消息隊列和內存塊鏈表,數據提交任務從空閑內存池中得到可用內存塊之后將本任務要顯示的數據存入該內存塊,此時該內存就變成了帶有數據的待顯示數據塊。而后將該內存塊的地址以消息的形式注冊在顯示消息隊列上。消息隊列的長度設置為16,雖然這里只有12個任務會發(fā)送消息給消息隊列,但在實時多任務程序中,各個任務的運行是隨機的,消息隊列在一段時間內得到的消息個數是個不定值,所以留出4個空位作為裕度。而且設置初始值為16的計數信號量來保護消息隊列,數據提交任務在提交數據之前先檢測該信號量,如該信號量有效就可以發(fā)送信號,如信號量無效則需等待,直到有可用信號位時方可將信號發(fā)出。在外部硬件操作端,由外部發(fā)送任務將消息隊列中的消息按照固定速率發(fā)送到外部信號線上。

        這樣設計,消息隊列就相當于一個緩沖區(qū),使得所有提交任務都可以向這個緩沖區(qū)發(fā)送待顯示數據,有效地避免了多個任務爭用一個外圍設備而引起的死鎖、競爭冒險等問題。同時減少了任務數量,減少了任務切換的次數,充分利用了系統(tǒng)時間,提高了系統(tǒng)性能。

        3.4 關鍵區(qū)保護

        多任務設計中每個任務在任何時刻都可能被其他任務打斷,必須充分考慮代碼的安全性、可重入性、可靠性、饑餓、互鎖、死鎖等情況。[3]

        為了避免上述情況,任務間消息發(fā)送和傳遞時以及在數據采樣時對相應函數體進行關鍵區(qū)保護,在這些函數運行的時候禁止中斷和任務調度,以保證數據傳遞和數據采樣的絕對正確性和系統(tǒng)運行的絕對安全性。

        4 極限頻率測定及總結

        上位機超級終端接收到的極限頻率測試結果如圖5所示。

        圖5 極限頻率測量結果

        分別測試了高頻段、中頻段和低頻段的極限頻率,結果在CPU使用率80%~90%的情況下測定。該系統(tǒng)成功實現(xiàn)了智能化設計和優(yōu)先級動態(tài)調度、系統(tǒng)參數動態(tài)設置等功能,達到了設計指標。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 嘉义县| 观塘区| 阜新市| 张家界市| 商都县| 七台河市| 新巴尔虎右旗| 定陶县| 延津县| 禄劝| 吉安市| 连云港市| 威宁| 益阳市| 壶关县| 儋州市| 凤庆县| 东乌| 彰化县| 齐齐哈尔市| 三穗县| 长阳| 称多县| 永川市| 天等县| 竹溪县| 永济市| 河池市| 乐安县| 卢湾区| 板桥市| 榆林市| 永安市| 岫岩| 五河县| 泾源县| 安吉县| 苏尼特左旗| 比如县| 呼伦贝尔市| 炎陵县|