石文佳,孫宏軍,張亞洲
(天津大學(xué) 電氣與自動化工程學(xué)院,天津 300072)
?
MCU平臺的嵌入式系統(tǒng)軟件設(shè)計研究
石文佳,孫宏軍,張亞洲
(天津大學(xué) 電氣與自動化工程學(xué)院,天津 300072)
嵌入式系統(tǒng)的運行需要可靠性和實時性的保證,因此良好的可靠性和實時性是嵌入式系統(tǒng)軟件設(shè)計的重要標(biāo)準(zhǔn)。同時為了使軟件系統(tǒng)的魯棒性更強,嵌入式系統(tǒng)的設(shè)計需要一個非常好的軟件架構(gòu)。這里介紹了一種基于MCU平臺的嵌入式系統(tǒng)軟件架構(gòu)方法。在這個方法中,事件驅(qū)動機制的引入滿足了對軟件架構(gòu)的要求,主程序中不僅采用了優(yōu)先調(diào)度機制,同時也加入了軟件抗干擾措施,這些都使系統(tǒng)的實時性和可靠性得到了明顯的提高。設(shè)計實驗比較由該方法得到的軟件架構(gòu)與原始軟件架構(gòu)的實時性,得出由該方法優(yōu)化后的軟件架構(gòu)確實具有更好的性能。
MCU;MSP430F1611;嵌入式系統(tǒng);可靠性;實時性;渦街流量計
嵌入式系統(tǒng)通常由嵌入式處理器、外圍設(shè)備、嵌入式軟件等部分組成,其中微處理器(MCU)在嵌入式系統(tǒng)中占據(jù)著相當(dāng)重要的位置。由于MCU大多是8位或16位機,內(nèi)部資源和運算能力都受到限制,無法與高性能處理器相比較,不能運用比較成熟的嵌入式實時操作系統(tǒng),系統(tǒng)軟件又與硬件平臺有較大關(guān)聯(lián),故而需要開發(fā)人員自己進(jìn)行軟件體系的構(gòu)建[1]。嵌入式系統(tǒng)對于實時性要求很高,如何處理各個任務(wù)的運行和調(diào)度,也會直接影響到嵌入式系統(tǒng)的可靠性乃至整體性能。因此好的軟件體系架構(gòu),對開發(fā)優(yōu)秀而可靠的嵌入式應(yīng)用系統(tǒng)極其重要。
天津大學(xué)流量實驗室研發(fā)了一款測量精度高、系統(tǒng)功耗低、功能完善、可靠性高的數(shù)字渦街流量計??紤]到低功耗和實時響應(yīng)是流量計設(shè)計的重點,在設(shè)計中選用了MSP430F1611單片機為控制器?;趩纹瑱C的數(shù)字渦街流量計,往往由于工作頻率低而導(dǎo)致系統(tǒng)實時性比較差(優(yōu)化前系統(tǒng)的執(zhí)行周期時間是2.5 s)。由于溫度、壓力的變化容易對氣體密度造成明顯的影響,因此在測量質(zhì)量流量時進(jìn)行了密度補償。同時針對水蒸汽密度測量困難的問題,采用基于IAPWS-IF97公式的密度補償方案[2]。
在原有設(shè)計中,硬件電路和外圍器件布局的設(shè)計是比較合理的,但是系統(tǒng)軟件部分的設(shè)計差強人意。主要表現(xiàn)為:程序沒有對功能模塊和層次進(jìn)行細(xì)致的劃分,主程序中含有大量與硬件平臺相關(guān)的代碼,不利于閱讀和修改維護(hù);按鍵與LCD顯示存在明顯延遲,極端情況下甚至?xí)霈F(xiàn)按鍵無響應(yīng)的情況。以上這些說明該系統(tǒng)軟件在實時性和可靠性方面都存在缺陷,即軟件體系架構(gòu)在一定程度上是不合理的。圖1為未進(jìn)行優(yōu)化前的系統(tǒng)軟件體系結(jié)構(gòu)??梢钥闯?,每隔2.5 s整個系統(tǒng)會循環(huán)執(zhí)行一次。這種結(jié)構(gòu)的缺點在于:①按鍵和屏幕顯示不能獲得及時的響應(yīng);②按鍵處理過程中使用軟件延時消除抖動,會降低系統(tǒng)的實時性;③串口通信結(jié)束后,系統(tǒng)長時間處于等待狀態(tài),無法及時處理其他任務(wù)。本文在優(yōu)化該數(shù)字渦街流量計的原有軟件架構(gòu)的同時,給出了如何設(shè)計出合理的嵌入式軟件體系的方法,系統(tǒng)的實時性和可靠性得到了改進(jìn)。
圖1 原始程序流程圖
嵌入式系統(tǒng)設(shè)計中普遍使用16位MCU,而這些MCU的功能和資源都非常有限,運行嵌入式實時操作系統(tǒng)往往存在很大的負(fù)擔(dān),因此要自行設(shè)計該嵌入式系統(tǒng)的軟件體系結(jié)構(gòu)。這里引入了程序模塊化的思想。模塊化是軟件架構(gòu)和程序設(shè)計重要的方法和手段。在模塊化的程序結(jié)構(gòu)中,主程序僅僅是執(zhí)行調(diào)度功能,負(fù)責(zé)及時調(diào)用功能模塊程序。
2.1 程序模塊化
C語言作為一種結(jié)構(gòu)化的程序設(shè)計語言,主要依據(jù)程序的功能進(jìn)行模塊劃分[7]。
程序設(shè)計的過程中,將各個功能模塊的程序都放到一個.c文件中,同時在.h文件中進(jìn)行模塊接口的聲明,以方便其他文件的調(diào)用和管理。對于底層與硬件設(shè)備緊密相關(guān)的代碼用精煉的語言編寫,執(zhí)行效率高。其他與硬件平臺無關(guān)的代碼運用模塊化編程思想編寫,以便于代碼的移植與重用。按照這種思想,改進(jìn)后的數(shù)字渦街流量計的程序劃分為如下幾個模塊:按鍵處理模塊、LCD顯示模塊、溫壓補償模塊、脈沖捕獲方法測頻率模塊、FFT方法測頻率模塊、通信模塊、脈沖輸出/PWM波輸出模塊等[6]。
2.2 系統(tǒng)任務(wù)調(diào)度機制
嵌入式系統(tǒng)要獲得很高的實時性和可靠性,就要有合理的軟件架構(gòu)?;贛CU的嵌入式系統(tǒng)程序典型執(zhí)行順序為:首先對硬件設(shè)備進(jìn)行初始化;然后對軟件模塊進(jìn)行初始化;最后程序進(jìn)入無限循環(huán),繼續(xù)調(diào)用模塊的處理函數(shù)。首選的循環(huán)實現(xiàn)方案是while(1){}。
在while(1){}模式中,通過使用事件驅(qū)動機制和前后臺程序結(jié)構(gòu)來對各個模塊進(jìn)行調(diào)度。事件驅(qū)動機制的原理就是給每個功能模塊設(shè)置變量作為“使能標(biāo)志”,通過使能該標(biāo)志來觸發(fā)模塊所代表的事件。而前后臺程序結(jié)構(gòu)是由主循環(huán)加中斷構(gòu)成的。在while(1){}循環(huán)體系中,主程序按照順序來查詢各個模塊的使能標(biāo)志變量,當(dāng)發(fā)現(xiàn)標(biāo)志被使能時則執(zhí)行相應(yīng)任務(wù),否則放棄。在這種方式下常見的有如下兩種調(diào)度機制。
(1) 順序調(diào)度機制
順序調(diào)度機制示意圖如圖2所示。
圖2 順序調(diào)度機制示意圖
在這種調(diào)度機制情況下,各功能模塊在主程序中沒有優(yōu)先級的區(qū)別,主程序會依次輪詢各個模塊的使能標(biāo)志變量,通過判斷該使能標(biāo)志的情況,進(jìn)行模塊調(diào)度的決定。
順序調(diào)度機制的程序結(jié)構(gòu)優(yōu)點是,這一模式可以保證所有的功能模塊得到同等的調(diào)度的機會。但是它的缺點也很明顯:可能不能及時響應(yīng)對于實時性要求較高的任務(wù)。
(2) 優(yōu)先調(diào)度機制
圖3為優(yōu)先調(diào)度機制的示意圖。優(yōu)先調(diào)度機制的特點是主程序按照一定的優(yōu)先級次序,查詢各個功能模塊的使能標(biāo)志變量。在完成模塊任務(wù)后跳出本次循環(huán),開始新一輪的查詢和執(zhí)行。
圖3 優(yōu)先調(diào)度機制示意圖
優(yōu)先調(diào)度機制的程序結(jié)構(gòu)的優(yōu)點在于,這一模式可以讓排在前面的優(yōu)先級較高的功能模塊獲得及時迅速的響應(yīng)。
未修改前的系統(tǒng)軟件程序使用順序調(diào)度機制,輪詢調(diào)度的周期是2.5 s,這樣能夠確保每個模塊都能夠被同等調(diào)用,但對于某些實時性要求較高的功能模塊得不到及時響應(yīng)。而優(yōu)化改進(jìn)后的程序使用優(yōu)先調(diào)度機制,能夠使具有較高實時性的模塊靠前調(diào)用。對于突發(fā)事件的及時響應(yīng),可以使用設(shè)置中斷方式,例如按鍵響應(yīng)等任務(wù)都采用中斷方式進(jìn)行響應(yīng)。得到的修改后的主程序圖如圖4所示。
圖4 優(yōu)化后的程序流程圖
2.3 具體程序的模塊化
在程序的設(shè)計中,除了按功能劃分的模塊之外,通常還包括兩類基本的模塊:硬件驅(qū)動模塊和軟件驅(qū)動模塊。同時,軟件功能模塊要滿足低耦合和高內(nèi)聚的要求。
2.3.1 硬件驅(qū)動模塊
硬件驅(qū)動模塊一般包括函數(shù)有:硬件設(shè)備初始化、設(shè)置CPU為對應(yīng)硬件的控制線、對外圍設(shè)備提供操作接口函數(shù)。
直接作用于硬件的驅(qū)動程序應(yīng)該放到單獨的模塊中,同時封裝成具有標(biāo)準(zhǔn)接口的API函數(shù)。例如LCD液晶顯示的控制,應(yīng)當(dāng)把寫數(shù)據(jù)、寫命令、顯示字符等函數(shù)封裝成API函數(shù),以方便調(diào)用,使調(diào)用函數(shù)不必再對硬件寄存器直接進(jìn)行操作。也可以將針對外圍設(shè)備的底層操作做成程序驅(qū)動庫,相當(dāng)于各個外設(shè)的API函數(shù),這樣方便上層程序的調(diào)用和管理[6]。
2.3.2 軟件功能模塊
軟件模塊的程序設(shè)計中,選擇簡潔合理的算法是非常重要的。例如FFT算法具有高復(fù)雜性,對處理器的運算速度和RAM大小都有一定要求,所以FFT算法及采樣點個數(shù)的選擇對于提高軟件系統(tǒng)實時性非常重要。
FFT算法有基2、基4、以及分裂基FFT算法和MFFT算法,考慮到MCU的性能和C語言實現(xiàn)的復(fù)雜度,選擇了基2的FFT算法?;?的FFT算法的主要步驟是同時將兩個數(shù)從內(nèi)存中取出逆序排列,運行蝶形運算,將結(jié)果放回到內(nèi)存中去。設(shè)計中對采樣的1 024個點進(jìn)行FFT運算,如果直接進(jìn)行DFT復(fù)數(shù)乘法,次數(shù)為1 048 576 次,而FFT算法只需要5 120次,大幅度降低了運算量,節(jié)省了計算時間。這種實現(xiàn)方法占用RAM較小,運算次數(shù)也較少。同時為提高運算速度,運行FFT算法前打開4 MHz時鐘,F(xiàn)FT算法完成后關(guān)閉4 MHz時鐘,打開DCO降低系統(tǒng)功耗[5]。
2.3.3 中斷服務(wù)程序
中斷的設(shè)置也是嵌入式系統(tǒng)實時性的重要手段。在實際應(yīng)用中,主程序通過標(biāo)志變量的值來判斷發(fā)生的中斷并調(diào)用對應(yīng)的中斷處理程序。在優(yōu)化后的程序中對按鍵的處理設(shè)置為中斷方式,一旦有按鍵按下,CPU進(jìn)行響應(yīng),將按鍵中斷標(biāo)志位置1,退出中斷,主程序調(diào)用按鍵功能模塊。這樣縮短了中斷執(zhí)行時間,以便能夠響應(yīng)其他中斷,提高了系統(tǒng)的實時性。同樣在溫度和壓力的采樣過程中也運用中斷方式進(jìn)行響應(yīng),中斷服務(wù)子程序只進(jìn)行數(shù)據(jù)存儲,在主函數(shù)中才對數(shù)據(jù)進(jìn)行處理[5]。
針對優(yōu)化改進(jìn)前后的軟件體系架構(gòu)的實時性,設(shè)計了對比實驗。按鍵后液晶屏幕顯示切換,屏幕的及時響應(yīng)就能夠反應(yīng)系統(tǒng)的實時性。通過使用秒表記錄數(shù)字渦街流量計的屏幕切換的時間,來對優(yōu)化前后的軟件體系結(jié)構(gòu)的實時性進(jìn)行對比。實驗的具體過程是給該數(shù)字渦街流量計上電,然后通過按鍵進(jìn)行畫面的調(diào)節(jié),多次驗證,得到軟件優(yōu)化前后的屏幕切換時間。實驗的屏幕畫面切換過程如圖5所示。測得的系統(tǒng)軟件優(yōu)化前后屏幕切換時間如表1所列。實驗結(jié)果表明:在多次的重復(fù)實驗中,優(yōu)化后的系統(tǒng)軟件在實時性方面表現(xiàn)較好。
圖5 屏幕切換畫面
原嵌入式系統(tǒng)軟件/s優(yōu)化后的軟件/s優(yōu)化時間/s2.11.60.52.01.70.32.11.50.62.11.60.5
[1] 王斌.基于MSP430的低功耗數(shù)字渦街流量計研究[D]. 天津:天津大學(xué),2008: 6-7.
[2] 王肖芬,徐科軍.基于DSP的低成本渦街流量計信號處理系統(tǒng)[J].儀器儀表學(xué)報,2006(11): 1427-1431.
[3] Tammy Noergaard. Embedded Systems Architecture[M]. Oxford: Newnes,2005:309-379.
[4] Texas Insruments: MSP430x1xx Family User’s Guide, 2006.
[5] John G Proakis, Dimitris G Manolakis. Digital Sinnal Processing:Principles, Algorithms,and Applications, Fourth Edition[M]. Beijing:Publishing House of Electrics Industry,2007:379-399.
[6] 張亞洲.渦街流量傳感器周期振動影響研究[D].天津:天津大學(xué),2013: 49-55.
[7] 張俊.匠人手記[M]. 北京: 北京航空航天大學(xué)出版社, 2008: 40-53.
石文佳(碩士研究生),主要研究方向為渦街流量計的優(yōu)化改進(jìn);孫宏軍(副教授),主要研究方向為過程參數(shù)檢測與信息處理、傳感技術(shù)與信息處理、嵌入式系統(tǒng)設(shè)計等。
參考文獻(xiàn)
[1] 周宇博,劉杰. 基于模型的無刷電機控制代碼快速生成[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2012(3):1-4.
[2] 邱寶梅,左文英,王鳳娟. 基于Simulink/RTW的汽車電子控制系統(tǒng)的研究[J]. 計算機測量與控制,2011(5):1086- 1088.
[3] 劉杰,翁公羽,周宇博.基于模型的設(shè)計——MCU篇[M]. 北京:北京航空航天大學(xué)出版社, 2011.
[4] 徐超坤,朱婷,李威宣. 基于模型的嵌入式C代碼的實現(xiàn)與驗證[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2011(12):15- 18.
[5] MathWork Inc. Production Code Generation Technology,2009.
[6] 任佳麗. 基于模型的嵌入式軟件開發(fā)方法研究[D].太原:山西大學(xué),2009.
[7] MathWork Inc. Developing Embedded Targets using Real- Time Workshop Embedded Coder,2010.
楊潤澤(助教),主要研究方向為內(nèi)燃機性能與電控技術(shù)。
(責(zé)任編輯:高珍 收稿日期:2013-12-06)
Design and Research of Embedded System Software Based on MCU Platform
Shi Wenjia, Sun Hongjun, Zhang Yazhou
(School of Electrical Engineering and Automation, Tianjin University, Tianjin 300072, China)
The operation of embedded system needs the guarantee of reliability and real-time performance, so the fairly good reliability and real-time performance are the important standards in embedded system design. In order to make software system more robust,the good software architecture is required in the design of embedded system. This paper introduces a kind of design method of embedded system software structure based on MCU platform. In this method, the introduction of event-driven mechanism can meet the demand of software architecture. The main program not only adopts the priority scheduling mechanism, but also addes the software anti-interference measures, which all improve the real-time performance and reliability of software system. The real-time performance is verified through designed experiment to compare the before and after embedded system software, which can conclude that the optimized embedded system software has better performance.
MCU; MSP430F1611; embedded system software; reliability; real-time performance; vortex flowmeter
TP212.9
A
珍
2013-11-12)