摘 要:針對(duì)國(guó)內(nèi)32位單片機(jī)在工業(yè)自動(dòng)化領(lǐng)域產(chǎn)品設(shè)計(jì)中的普及使用,結(jié)合國(guó)外先進(jìn)實(shí)時(shí)多任務(wù)系統(tǒng)以及傳統(tǒng)前后臺(tái)系統(tǒng)的優(yōu)點(diǎn),設(shè)計(jì)一套由多任務(wù)調(diào)度機(jī)制和前后臺(tái)中斷觸發(fā)機(jī)制相結(jié)合的實(shí)時(shí)操作系統(tǒng),自動(dòng)完成任務(wù)調(diào)度,及任務(wù)狀態(tài)統(tǒng)計(jì)分析,通過(guò)搭建統(tǒng)一工業(yè)級(jí)軟件運(yùn)行平臺(tái),增強(qiáng)產(chǎn)品的模塊化設(shè)計(jì),提高產(chǎn)品功能安全性能。
關(guān)鍵詞:32位單片機(jī);工業(yè)自動(dòng)化;實(shí)時(shí)多任務(wù)系統(tǒng);前后臺(tái)系統(tǒng);統(tǒng)一工業(yè)級(jí)軟件運(yùn)行平臺(tái);模塊化
中圖分類號(hào):TP368.1
隨著32位單片機(jī)功耗及成本的降低,其在工業(yè)控制領(lǐng)域的使用正在逐步普及。由于32位單片機(jī)提供給了工業(yè)級(jí)智能型產(chǎn)品開發(fā)者更多的內(nèi)存空間及外設(shè)資源同時(shí)具有更快的處理速度,更高的運(yùn)行效率,并且與DSP控制器逐漸同治化,在控制及信號(hào)處理領(lǐng)域很有發(fā)展前景;在32位單片機(jī)前,由于性能的局限性,對(duì)每個(gè)基于單片機(jī)的產(chǎn)品的開發(fā),更多的是考慮如何使用有限的存儲(chǔ)空間以存儲(chǔ)數(shù)據(jù)和程序,如何改進(jìn)算法使得單片機(jī)能跑得起來(lái)而又不影響實(shí)時(shí)性。因此每款產(chǎn)品的系統(tǒng)架構(gòu)幾乎都是獨(dú)立的,是基于該產(chǎn)品的功能定制的,使用的單片機(jī)類型也多種多樣,不具備通用性,在后期移值和借鑒方面存在很大的困難;隨著32位單片機(jī)進(jìn)入工業(yè)控制領(lǐng)域,其存儲(chǔ)空間大,運(yùn)行速度快,功耗低,可控外設(shè)多等優(yōu)勢(shì)突現(xiàn)出來(lái);使得軟件系統(tǒng)架構(gòu)的標(biāo)準(zhǔn)化、規(guī)范化得以實(shí)現(xiàn),就如同民用PC操作系統(tǒng)一樣,使得所有應(yīng)用開發(fā)者有機(jī)會(huì)在一個(gè)統(tǒng)一的穩(wěn)定的平臺(tái)下,采用同一規(guī)范開發(fā)不同種類的應(yīng)用程序,實(shí)現(xiàn)不同的功能;將功能的實(shí)現(xiàn)和系統(tǒng)分離,得以保證系統(tǒng)的穩(wěn)定性,使產(chǎn)品開發(fā)者不再為每款產(chǎn)品搭建低層系統(tǒng)架構(gòu),可以專注于產(chǎn)品的功能需求和功能應(yīng)用的開發(fā);我們通常將32位單片機(jī)中采用的系統(tǒng)稱為嵌入式系統(tǒng);
嵌入式系統(tǒng)通常采用兩種模式,第一種是前后臺(tái)系統(tǒng)(也叫超循環(huán)系統(tǒng));第二種是多任務(wù)系統(tǒng);這兩個(gè)系統(tǒng)各有優(yōu)點(diǎn),前后臺(tái)系統(tǒng)在工業(yè)產(chǎn)品方面特別是工業(yè)現(xiàn)場(chǎng)儀器儀表類產(chǎn)品比較常見(jiàn),工業(yè)化智能產(chǎn)品功能相對(duì)單一通常用于采集傳感器信號(hào)進(jìn)行前期處理后將數(shù)據(jù)信息遠(yuǎn)傳給控制系統(tǒng),同時(shí)只需要處理幾件具有前后因果關(guān)系的關(guān)聯(lián)事務(wù),而主要強(qiáng)調(diào)系統(tǒng)的安全性及可控性,系統(tǒng)注重在某個(gè)固定的時(shí)間點(diǎn),執(zhí)行/完成某個(gè)固定時(shí)間段的任務(wù),某項(xiàng)任務(wù)必須在另一項(xiàng)任務(wù)完成后開始執(zhí)行,否則屬于無(wú)效任務(wù);多任務(wù)系統(tǒng)在民用產(chǎn)品以及二次儀表和控制系統(tǒng)中采用交多,具有可以同時(shí)并行處理多項(xiàng)互不相關(guān)的任務(wù)的能力,能夠提供多元化的功能配置,相比前者系統(tǒng)邏輯控制比較復(fù)雜,特別是在任務(wù)間信息傳輸和任務(wù)見(jiàn)內(nèi)存分配上,及任務(wù)調(diào)度機(jī)制方面,對(duì)開發(fā)者各方面具有較高的要求,在多任務(wù)系統(tǒng)上開發(fā)產(chǎn)品需要循序漸進(jìn),要很熟練的掌握系統(tǒng)的性能需要交長(zhǎng)時(shí)間的學(xué)習(xí)和使用;
因?yàn)?2位單片機(jī)在商業(yè)領(lǐng)域推廣已經(jīng)十幾年了,目前國(guó)內(nèi)采用的由幾家國(guó)外大公司開發(fā)的多任務(wù)操作系統(tǒng)技術(shù)方面已經(jīng)比較成熟,對(duì)現(xiàn)有多任務(wù)嵌入式系統(tǒng)版本的更新也多是圍繞可執(zhí)行更多的任務(wù)數(shù)量,任務(wù)優(yōu)先級(jí)數(shù)量,任務(wù)調(diào)度方法,系統(tǒng)檢測(cè)能力,信息傳輸方法等方面;而工業(yè)控制領(lǐng)域從2011年開始普及32位單片機(jī),因此國(guó)內(nèi)/外儀器儀表生產(chǎn)企業(yè)對(duì)工業(yè)控制產(chǎn)品軟件系統(tǒng)架構(gòu)還沒(méi)有統(tǒng)一的開發(fā)標(biāo)準(zhǔn);本文就根據(jù)國(guó)際上對(duì)工業(yè)產(chǎn)品軟件質(zhì)量及功能安全標(biāo)準(zhǔn)相關(guān)要求,結(jié)合作者自己在儀器儀表產(chǎn)品開發(fā)過(guò)程中的實(shí)際應(yīng)用,對(duì)工業(yè)產(chǎn)品軟件系統(tǒng)規(guī)范化進(jìn)行研究;
本文結(jié)合Ucos多任務(wù)系統(tǒng)以及前后臺(tái)系統(tǒng)的優(yōu)點(diǎn),搭建了一套由多任務(wù)調(diào)度機(jī)制和前后臺(tái)中斷觸發(fā)機(jī)制相結(jié)合的實(shí)時(shí)操作系統(tǒng),該系統(tǒng)采用標(biāo)準(zhǔn)C語(yǔ)言編寫,去除了不同單片機(jī)及編譯器的相關(guān)性,可直接用于各型號(hào)32位單片機(jī)和高性能16位單片機(jī)的應(yīng)用軟件開發(fā);通過(guò)加入少量指令也可以用于如電池供電型產(chǎn)品的超低功耗應(yīng)用;
首先將系統(tǒng)的任務(wù)處理機(jī)從功能模塊中獨(dú)立出來(lái);任務(wù)處理機(jī)作為系統(tǒng)的核心,主要功能是任務(wù)調(diào)度,以及任務(wù)運(yùn)行狀態(tài)分析處理;它并不關(guān)心任務(wù)具體完成的功能,只是確保各任務(wù)能夠按照開發(fā)者提供給系統(tǒng)的任務(wù)配置正常運(yùn)行,并統(tǒng)計(jì)輸出具體的性能參數(shù),給任務(wù)提供一個(gè)穩(wěn)定的運(yùn)行平臺(tái)同時(shí)方面開發(fā)者讀取個(gè)任務(wù)運(yùn)行狀態(tài),減少任務(wù)開發(fā)過(guò)程中的不確定性;開發(fā)者只需要將功能需求,以任務(wù)的形式提交給系統(tǒng),簡(jiǎn)單配置任務(wù)的優(yōu)先級(jí)別,以及響應(yīng)時(shí)間,系統(tǒng)自動(dòng)運(yùn)行并反饋任務(wù)狀態(tài),幫助開發(fā)者對(duì)任務(wù)進(jìn)行優(yōu)化;一個(gè)任務(wù)必須對(duì)應(yīng)一個(gè)功能模塊;而一個(gè)功能模塊可以設(shè)計(jì)多個(gè)自任務(wù);為了結(jié)構(gòu)簡(jiǎn)單,邏輯清晰每個(gè)功能模塊最好將任務(wù)數(shù)保持在三個(gè)以下;同一個(gè)功能模塊下的任務(wù)之間的通信,可通過(guò)模塊內(nèi)部變量直接完成;不同功能模塊下的任務(wù)之間的通信,可通過(guò)模塊提供的接口完成;這樣可以優(yōu)化系統(tǒng)的模塊化配置,減少某功能運(yùn)行出錯(cuò)帶來(lái)不確定因素;每個(gè)功能模塊相互獨(dú)立,有各自的初始化配置,完成任務(wù),糾錯(cuò)與自恢復(fù)能力;系統(tǒng)通過(guò)任務(wù)狀態(tài)機(jī)讀取任務(wù)配置信息,自動(dòng)完成任務(wù)調(diào)度,并將任務(wù)信息提供給相應(yīng)功能模塊分析處理,當(dāng)任務(wù)執(zhí)行時(shí)序發(fā)生錯(cuò)亂時(shí)系統(tǒng)能對(duì)其進(jìn)行監(jiān)控并進(jìn)行恢復(fù)如圖1:
圖1
每個(gè)功能模塊由輸入接口、輸出接口、模塊內(nèi)部變量和方法三部分組成如圖2:
圖2
任務(wù)處理機(jī)由任務(wù)狀態(tài)分析機(jī)、任務(wù)調(diào)度機(jī)、模塊內(nèi)部變量和方法三部分組成如圖3:
圖3
為了滿足任務(wù)安全控制要求,需要在進(jìn)入任務(wù)前設(shè)置先決條件判定,任務(wù)完成后設(shè)置后續(xù)條件判定以避免任務(wù)執(zhí)行邏輯順序出錯(cuò),如果運(yùn)行過(guò)程中發(fā)現(xiàn)存在錯(cuò)誤,既對(duì)任務(wù)安全狀態(tài)進(jìn)行恢復(fù)如圖4:
圖4
根據(jù)工業(yè)儀器儀表產(chǎn)品的需求分析可以將系統(tǒng)分解為十個(gè)主要的功能模塊如圖5:
圖5
對(duì)以上功能模塊進(jìn)行詳細(xì)設(shè)計(jì)得到與各模塊功能對(duì)應(yīng)的子任務(wù)函數(shù)及模塊間通信接口如圖6:
圖6
以下是該系統(tǒng)軟件設(shè)計(jì),該系統(tǒng)是通過(guò)一個(gè)時(shí)鐘中斷進(jìn)行驅(qū)動(dòng),時(shí)鐘節(jié)拍通常設(shè)置為10~100ms,這里中斷只是調(diào)用OS_TickInt函數(shù)產(chǎn)生一個(gè)時(shí)鐘信號(hào),而不進(jìn)行具體操作(如果在中斷加入退出低功耗指令,可以在每個(gè)節(jié)拍到來(lái)時(shí)喚醒系統(tǒng),完成任務(wù)后再次觸發(fā)指令進(jìn)入低功耗模式),所有任務(wù)調(diào)度主要是通過(guò)時(shí)鐘節(jié)拍中斷觸發(fā)Task_Tick系統(tǒng)任務(wù)完成,在單片機(jī)空閑狀態(tài)下Task_Tick系統(tǒng)任務(wù)持續(xù)執(zhí)行,計(jì)算采集到的中斷中產(chǎn)生的時(shí)鐘信號(hào);并根據(jù)優(yōu)先級(jí)和任務(wù)響應(yīng)時(shí)間為依據(jù)將任務(wù)喚醒并執(zhí)行;通過(guò)實(shí)驗(yàn)測(cè)試該系統(tǒng)能為每個(gè)任務(wù)提供一個(gè)準(zhǔn)確的時(shí)鐘管理,以至于不會(huì)因?yàn)槟稠?xiàng)任務(wù)運(yùn)行時(shí)間較長(zhǎng),影響到其它任務(wù)時(shí)鐘的準(zhǔn)確性;由于該系統(tǒng)沒(méi)有采用多任務(wù)系統(tǒng)中的子任務(wù)堆棧方式,高優(yōu)先級(jí)的任務(wù)無(wú)法打斷運(yùn)行中的任務(wù),但提供了任務(wù)遺失數(shù)據(jù)統(tǒng)計(jì)信息,能夠滿足絕大多數(shù)應(yīng)用;該系統(tǒng)通過(guò)提供運(yùn)行參數(shù)副本的形式供功能模塊任務(wù)查詢;而對(duì)副本數(shù)據(jù)的篡改也不會(huì)影響到系統(tǒng)的穩(wěn)定性;本系統(tǒng)可提供任務(wù)執(zhí)行時(shí)間長(zhǎng)度,任務(wù)響應(yīng)時(shí)間,任務(wù)計(jì)數(shù)器,任務(wù)丟失次數(shù),任務(wù)優(yōu)先級(jí),任務(wù)超時(shí)警告,任務(wù)ID,任務(wù)名稱等信息的統(tǒng)計(jì);相對(duì)過(guò)去的前后臺(tái)系統(tǒng)方式,本系統(tǒng)可提供的信息量更多,使得開發(fā)人員錯(cuò)誤分析更方便,也降低了開發(fā)人員對(duì)系統(tǒng)的熟悉程度要求;
以下為時(shí)鐘信號(hào)采集函數(shù)由類定時(shí)器中斷函數(shù)調(diào)用,為系統(tǒng)運(yùn)行提供基礎(chǔ)時(shí)鐘;
void OS_TickInt(void){
Task_TickNum++;
Goin=1;
}
以下為系統(tǒng)時(shí)鐘運(yùn)算及任務(wù)調(diào)度函數(shù),通過(guò)時(shí)鐘管理器計(jì)算OS_TickInt捕獲到的時(shí)鐘信號(hào),并轉(zhuǎn)換成系統(tǒng)時(shí)鐘節(jié)拍,驅(qū)動(dòng)任務(wù);
void Task_Tick(void){
uint8_t i,indexa=0,indexbegin=0;
if(Goin==1){
Goin=0;
Task_TickNumNow=Task_TickNum;
Task_TickNum=0;
if(Task_TickNumNow!=0){
for(i=0;i _Task_Sched[i].Tick+=Task_TickNumNow; } } } for(i=0;i if(indexbegin==0){ indexa=i; indexbegin=1; } if(_Task_Sched[i].Prio>=_Task_Sched[indexa].Prio){ indexa=i; } Goinsub=1; } } if(Goinsub!=0){ Task_Seqcheck(); TaskPtr=_Task_Sched[indexa].Point;_Task_Sched[indexa].TimerLoseNum=Task_TickNumNow*Ticker/_Task_Sched[indexa].TickReload; _Task_Sched[indexa].Goin=1; _Task_Sched[indexa].Tick=_Task_Sched[indexa].Tick%(_Task_Sched[indexa].TickReload/Ticker); _OSStatus.TaskCurIndex=indexa; Task_TickStart=Task_TickNum; } } 通過(guò)調(diào)用各模塊初始化函數(shù),完成系統(tǒng)及外設(shè)初始化狀態(tài)配置,并將子任務(wù)插入系統(tǒng)就緒任務(wù)列表; void SysConfig_Ini(void){ SystemInit(); //MCU時(shí)鐘配置 OS_Ini(); //系統(tǒng)初始化Task_Create(FirstTask,500,1,\"First Task12124214\"); //FirstTask任務(wù)建立,重裝載時(shí)間500ms,優(yōu)先級(jí)1,名稱\"First Task12124214\"(由于字符數(shù)超過(guò)15個(gè)字符,系統(tǒng)按ID號(hào)給任務(wù)分配名稱為\"ID:xxx\") Task_Create(SecondTask,60,2,\"Second Task\"); //SecondTask任務(wù)建立,重裝載時(shí)間60ms,優(yōu)先級(jí)2,名稱\"Second Task\" } 上面的例子里,在系統(tǒng)上電時(shí)通過(guò)SysConfig_Ini函數(shù)配置向系統(tǒng)提交了10個(gè)常用任務(wù),系統(tǒng)為每個(gè)任務(wù)分配了一個(gè)獨(dú)立的時(shí)鐘管理,通過(guò)時(shí)鐘及任務(wù)優(yōu)先級(jí)驅(qū)動(dòng)各任務(wù)的運(yùn)行。經(jīng)過(guò)電腦仿真,效果如圖7,說(shuō)明該系統(tǒng)調(diào)度任務(wù)的效果能夠達(dá)到預(yù)期要求,可以用于工業(yè)產(chǎn)品安全功能設(shè)計(jì)。 圖7 參考文獻(xiàn): [1]Halbleiterspeicher-Testfolgen.Th.John,E.Schaefer,Elektronipraxis,H.6,18-26 and H.7,10-14,1980. [2]Signaturanalyse in der Datenverarbeitung.D.Leisengang,M,Wagner,Elektronik 32,H.21,S.67-72,1983. [3]安全技術(shù)中的微機(jī)——面向開發(fā)者和生產(chǎn)者的一種工具.H.Holscher,J.Rader,Verlag TUV Rheinland,Koln,1986,ISBN 3-88585-315-9. [4]計(jì)算機(jī)現(xiàn)在已能安全地執(zhí)行關(guān)鍵的安全功能.Otto Berg von Linde,Railway Gazette international,Vol.135,No.11,1979. [5]嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II原理及應(yīng)用.北京航空航天大學(xué)出版社. 作者簡(jiǎn)介:石磊(1981.5-),男,重慶人,中級(jí),碩士,研究方向:自動(dòng)化儀器儀表開發(fā)及軟件工程應(yīng)用。