1 時分多線程結構應用
通常,在單片機應用的各種控制系統中,都或多或少地存在著諸如現場資料擷取、控制量輸出、工作狀態檢測以及資料轉送等各種同外設的互動過程;而各類外設與Mcu的響應速度不匹配,是制約系統整體效能的重要因素。面對這種互動瓶頸,運用時分多線程架構可獲得良好的效果。
特別是對於系統與外設頻繁進行資料互動的場合,能顯著提升系統的即時響應能力。這裡採用的是以時分輪轉調度演算法實現在單片機系統中的多任務控制目標。
1.1 時分輪轉調度演算法的多線程實現
時分輪轉調度演算法是以多個線程輪流佔用cPu的執行時間來實現的。在外設互動頻繁的應用場合中,可有效地解決響應速度不匹配所造成的CPU等待外設響應的時間消耗問題,從而提高MCU運算組件的利用率。
而在多線程的調度切換過程中,要對上一個線程的運行環境進行保護,並為下一個線程做好準備。就單片機系統而言,要嚴格實現真正意義上的即時多線程式控制制,會受到容量、中斷源、指標等一系列系統資源的條件限制。
本文是以C8051F005單片機構建的應用系統。它是以805l核心為基礎的,沒有太多空間用於存放或保護任務切換時的現場資料(如程式指標、程式狀態字、累加器等),也難於應用搶佔式即時任務切換的實現激勵機制,同時MCU速率也有限。
針對單片機存在的這些資源瓶頸,運用時分輪轉演算法作為多線程式控制制演算法架構,以非搶佔式非同步處理方法,在合理分配、運用通用工作寄存器組的情況下,通過整合或細分功能模組結構,將控製程序劃分為各線程任務,以縮短CPU的閑置時間;並將每個線程的執行時間控制在時間片內,以降低環境切換的複雜度,從而降低開發風險。
1.2 多線程的管理原則及應用
(1)時間片長度
通過對控制功能、時序的合理組合,以時間片長度劃分的程式片段,應確保每個線程的執行程式碼片段在“時間片”內完成,以此降低線程任務的控制複雜度和設計風險。具體實施原則詳見第2節。
(2)線程協調方式
通過設定標識量,將各時間片內的線程任務協調起來。例如,在鍵盤輸入中的消抖動延時和索引值冗餘讀取、在A/D資料擷取中的採樣觸發與數值讀取,以及SPI的資料轉送等功能塊,都可進行任務線程的作業步驟細分。通過設定線程的階段標識量,協調前後時間片的線程執行步調。
(3)線程管理
在時鐘中斷服務程式中,用任務號調度線程執行次序。根據控制目標、裝置狀態以及當前線程的執行結果,選擇下一步將要執行的任務號;而各任務線程執行在主控迴圈程式中完成。也就是說,把時間片驅動以及任務調度與任務線程處理過程分開,這樣有利於構建靈活、高效的軟體架構結構,提高系統的即時響應能力與可維護性。
在以C8051F005晶片構建的應用系統中,為了縮短時間片中斷服務程式的執行時間,提高系統的中斷響應能力,任務線程調度以及環境切換控制在T2時鐘中斷服務程式中實現,以事件發生標識TstateChange和線程標識TimeSlice進行線程調度。TstateChange用於控制主控迴圈方向,TimeSlice則用於調度就緒線程的執行次序。
為了降低系統功耗,提高系統可靠性,程式主控迴圈體在每個迴圈結束後都要使MCU進入體眠狀態,並以時間片T2中斷、其他非同步中斷源或引腳觸發事件等喚醒MCU。而TstateChange狀態標識量就是控制主控迴圈方向,以區分時間片任務線程調度與非T2等的非同步中斷事件。其主控迴圈流程1所示,其線程式控制制可以用如下程式結構實現。
{
get_larger(this)
}" src="http://img.ddvip.com/2008_07/1216719497_ddvip_6254.jpg" alt="時分多線程在單片機系統中的應用研究">
該體系架構優點在於:可方便地構建控制關係並行的多線程架構;任務線程的執行時間明確;同時對調整任務線程執行時序、維護功能模組提供了便利。
缺陷是:由於構成的是非搶佔式控制方式,線上程調度處理上不能確保時間關鍵的非同步事件優先執行,這也是其器件核心的固有缺陷。
{
get_larger(this)
}" src="http://img.ddvip.com/2008_07/1216719528_ddvip_6241.jpg" alt="時分多線程在單片機系統中的應用研究">
2 確定時間片長度
在統籌考慮任務線程段的代碼量、外設響應、系統響應效能以及線程切換的資料保護量後,確定以lOms作線程時間片的切換單位。主要考慮以下幾方面因素:
(1)任務線程段代碼量的大小
根據各功能模組大小,依據相關性以及時序等邏輯關係,在考慮各功能模組內聚性、線程切換運算量的基礎上,進行模組分解、合并,組成線程執行程式碼片段,以確保線程執行程式碼片段(包括中斷服務程式的執行時間)能在時間片內完成,從而簡化了控制模型,降低了多線程中上下文之間切換的複雜度。
例如處理鍵盤輸入,為實現鍵盤輸入的消抖動幹擾、冗餘讀取索引值以及持續按鍵與點擊按鍵功能。通過設定若干標識變數,細分索引值處理線程的時序作業步驟,使每個作業執行時間片小於lOms,從而適應時鐘片調度的時間約束條件,降低設計風險。
對按鍵的20~30ms防震延時,可通過設定標識量keydelay,在時間片中斷服務程式中進行延時計數,而在主迴圈程式中就可進行如下處理。
{
get_larger(this)
}" src="http://img.ddvip.com/2008_07/1216719528_ddvip_4540.jpg" alt="時分多線程在單片機系統中的應用研究">
(2)外設響應
在考慮MCU同各種外設互動的延時因素中,要綜合平衡外設延時時間、線程切換、時間片周期等因素對系統整體綜合效能的影響,最大限度地提升CPU利用率。
(3)A/D資料轉換速率
對所讀溫度、功率值的採樣頻率,根據C8051F005的片上A/D轉換速率以及數字濾波處理的訊號冗餘讀數要求,兼顧時間片大小。
3 特別注意事項
①時間片中斷T2應設最高優先順序,以免其他中斷程式幹擾時間片發送器的即時性處理。
②中斷服務程式的調度演算法應盡量簡短,提高系統的響應能力。
③注意堆棧操作的溢出控制。
④分配在時間片中的線程程式碼片段要有合理的組合與調度考慮,以均衡負擔CPU的時間片,降低設計風險。
⑤在初始化系統狀態時,確保線程狀態標識的建立,以及時間片中斷T2的使能。
⑥謹慎處理中斷服務程式執行時間,避免擠佔線程時間片的正常處理,引起控制紊亂、系統崩潰。