黃瑞龍,廖曉文 發表於 2020-12-24 10:13:44
電子控制系統一般都是實時系統,常需處理許多並發事件的輸入數據流。這些事件的到來次序和機率通常是不可預測的,而且還要求系統必須在事先設定好的時限內做出相應的響應。對於如何控制系統的複雜行為,普遍採用的是事件觸發方案,即系統的所有行為響應系統外部事件而執行。然而,中斷丟失與事件觸發系統的開銷是人們經常忽略的一個問題,文獻討論了一個這樣的例子:一個包含27個任務、採用RM調度算法的事件觸發系統,CPU的實際利用率僅為18%。同時,電子控制系統也可以看作是一個能實時採集一組定義好的輸入值,同時在預先確定的時間間隔給出一個正確輸出的實時系統。為了滿足安全、低成本及程序儘可能簡單等苛刻要求,電子控制系統的開發最終走向時間觸髮結構。時間觸發意味著所有的與輸入採樣、計算及輸出結果等相關的動作在預先給定的時間前執行,因而能保證準確的調度時間。
1 時間觸發系統的任務調度器
調度器是一種用於電子控制系統的運行環境,也可看作是一個簡單的作業系統。在電子控制系統中使用調度器可以縮短開發時間,提高軟體的模塊化程度。調度器具有合作式與搶佔式兩種形式。如果一個被「喚醒」的高優先級任務可以打斷其他正在運行的低優先級任務,則調度器是搶佔式的;反之,則是合作式的。由於其應用背景的特殊性,電子控制系統運行的任務絕大多數是周期性任務(如周期性的數據採集任務、LED顯示刷新任務等),並且任務的就緒時間、開始時間、執行時間和截止期限等信息均可預先知道。因此,可以採用基於時間觸發形式的合作式調度器,即任務在特定時刻以周期性或單次方式被調度。
2 時間觸發合作式調度器的機制
時間觸發合作式調度器通常通過一個硬體定時器來實現,所有的任務都是由時間觸發的,這也意味著除了定時器中斷以外,再也沒有其他形式的中斷。硬體定時器將被設置為產生一個周期中斷信號,這個中斷信號的頻率約為1kHz。
時間觸發合作式調度器的主要功能就是喚醒在預先確定好時間執行的任務。在工作時間,調度器檢查靜態的任務鍊表,根據任務的周期判斷是否有任務需執行,如果有則立即執行任務;任務執行完後繼續檢查任務鍊表,重複上一個過程。完成鍊表檢查後,由於節能的關係,CPU進入休眠狀態,直到下一個時鐘節拍的到來。其任務調度機制如圖1所示。由於合作式調度器能保證在同一時刻,系統中只有一個任務被觸發,而且在任何時刻系統中都可以保證有任務在執行。這樣,系統的使用效率得到了提高。在分布式系統中,各個節點間存在著時間的漂移(由於每個節點所處的環境以及時鐘晶振的製作工藝等存在差異),所以必須動態地對節點時鐘進行調整,使整個系統的各個節點時鐘能夠同步。
合作式調度器可靠而且可預測的主要原因是在任一時刻只有一個任務是活動的,這個任務運行直到完成,然後再由調度器來控制。如果搶佔式調度,有多個活動任務,執行「上下文切換」及「關鍵段保護」等將增加系統的開銷。圖2比較了使用合作式調度器與搶佔式調度器設計巡航系統的情況。可以看到,採用合作式調度模式可以精簡所需的代碼行數,節省程序存儲器和數據存儲器空間。同時,許多研究表明,相對於搶佔式調度器,除任務級的響應時間快很多外,合作式調度器還具有很多優點。例如,文獻指出與搶佔式替代方案相比,合作式調度有以下四個優點:簡單,可減小系統開銷,容易測試以及更容易讓權威機構接受這種形式的調度。
3 應用實例
太陽跟蹤系統是針對太陽能空調、高效太陽能光伏發電、高效太陽能熱水器等需要對太陽進行實時跟蹤的應用領域設計的,通過使設備的某一面時刻與太陽光保持垂直,獲取最大的太陽能量。
本文涉及的跟蹤系統採用傳感器跟蹤與天文定位跟蹤相結合的模式。即通過當地的經緯度與當前日期計算日出、日落時間,然後根據日落、日出的時間差及電機的步距角,每隔一段時間輸出一個脈衝控制設備自動往西。同時,根據光電傳感器輸入,每隔一段時間控制電機在東、西、南、北四個方向自動調節設備,使設備與太陽光保持垂直。圖3給出了太陽跟蹤器上下文環境圖,給出了系統與傳感器和執行器接口的簡單描述。由圖3可知實現系統功能所需的任務、任務周期及執行時間如表1所列。
在表1所列的任務中,Task2每120 ms執行一次鍵盤掃描,用於設置當前時間、經緯度及保存手動調節設備的輸入。Task6根據手動調節設備輸入及光電傳感器「 target=_blank》傳感器的輸入調節設備方位。Task7計算日出日落時間,每24小時執行一次。Task3、Task4、Task5與Task6,採用swith_case結構,不在運行時間範圍內,程序直接跳出,否則運行相應的任務,Task8在到達日落時間或設備觸及西方向限位器時起作用,控制電機使設備對準太陽升起位置。
根據合作式調度器的原理與各任務的周期,設置定時器每4 ms產生一個周期中斷信號。因為有多個任務的執行時間超過4 ms,Task1無法按規定的頻率執行。此外,有多個任務的最壞執行時間超過30 ms,使鍵盤掃描的靈敏度受到影響。因此採用直接將Task1、Task2包含進定時器中斷服務子程序的方法,從而使所有任務的周期及執行時間均能滿足系統任務可調度的要求。
結語
在工程中採用事件觸發模式很大程度上會增加系統的複雜性,導致龐大的代碼結構。這樣的代碼長度及複雜性不適合普通開發人員構建,而商業實時作業系統往往價格昂貴,並且需要很大的作業系統開銷。採用基於時間觸發模式開發系統可以滿足實時、簡單、可預測性等工程要求。在應用實例中也可以看到,對於任務周期與執行時間相差懸殊的任務,為滿足可調度性的要求,將需頻繁執行的短任務加入定時器中斷服務子程序的方法延長了中斷處理的時間,同時削弱了系統實時響應能力及可預測能力。此外,也可以通過將執行時間長的任務分解成幾個執行時間短的任務來滿足任務可調度性。相對於事件觸發模式,時間觸發模式對工程技術人員的要求更高。
責任編輯:gt
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴