μC/OS-II在數字微波監控系統中的應用
0 引言
本文引用地址:http://dyxdggzs.com/article/201602/287604.htm隨著(zhù)嵌入式系統開(kāi)發(fā)的普及和深入,在更加復雜的應用中傳統軟件開(kāi)發(fā)手段難以滿(mǎn)足需求,嵌入式操作系統在開(kāi)發(fā)中扮演著(zhù)越來(lái)越重要的角色,已經(jīng)被廣泛應用于手機、移動(dòng)計算機設備、網(wǎng)絡(luò )設備和工控仿真等領(lǐng)域。嵌入式操作系統μC/OS-II源碼是公開(kāi)的,而且它是可移植、可固化、可裁減及可剝奪型的多任務(wù)實(shí)時(shí)內核,可用于各類(lèi)8位、16位和32位單片機和DSP,目前得到廣泛應用。本文給出一種數字微波設備監控系統的設計,該系統引入μC/OS-II之后,系統的開(kāi)發(fā)效率得到提高,整個(gè)系統的健壯性得到增強,文中對軟件設計應用中遇到的關(guān)鍵問(wèn)題作了深入討論并給出了相應的解決方案。
1 數字微波設備監控系統的設計
微波通信是一種利用微波傳輸信息的通信手段,數字微波采用數字信號處理技術(shù),利用微波信道傳輸數字信號,以下給出一種數字微波通信系統中監控系統的設計[1]。由兩個(gè)端站組成一條微波鏈路,每個(gè)端站含一個(gè)室內單元IDU(In-Door Unit)、一個(gè)室外單元ODU(Out-Door Unit)、連接室內單元和室外單元的同軸電纜、以及微波天線(xiàn)。本文主要討論IDU監控部分CPU相關(guān)內容的軟硬件設計。
1.1 微波監控IDU部分硬件設計
IDU組成框圖如圖1所示,主要由業(yè)務(wù)接口、輔助業(yè)務(wù)、復分接、微波幀分復接、中頻調制解調、中頻分合路器、電源、CPU及相關(guān)接口組成。

主業(yè)務(wù)數據通過(guò)業(yè)務(wù)接口電路復接后,與公務(wù)、輔助數據信號等一起進(jìn)入微波幀復接模塊,復接成微波幀信號,由調制模塊完成調制,通過(guò)中頻分合路器送往ODU。從ODU送來(lái)的中頻信號經(jīng)過(guò)中頻分合路器送往解調模塊解調出數據,送到微波幀分接電路,分接出主業(yè)務(wù)、公務(wù)以及輔助數據信息,通過(guò)主業(yè)務(wù)接口電路分接出各支路主業(yè)務(wù)數據。CPU對所傳輸的業(yè)務(wù)數據進(jìn)行監視和控制,監視所傳數據的狀態(tài)、性能等信息,可設置所傳數據的各種參數,通過(guò)輔助業(yè)務(wù)接口可提取和插入各種控制信息。
CPU采用PHILIPS公司的32位ARM芯片lpc2214[2],該芯片接口豐富,硬件設計時(shí)CPU相關(guān)接口完成功能如下:輸入接口提供按鍵設置掃描電路,輸出接口通過(guò)液晶、告警燈及蜂鳴器輸出信息,通過(guò)I2C接口CPU可實(shí)現對串行E2PROM、時(shí)鐘芯片的存取,CPU本身提供SPI接口,通過(guò)該接口實(shí)現本端與遠端控制信息的交換。串行接口提供一種監控手段,可實(shí)現CPU與PC機的通信,完成狀態(tài)讀取和各種命令的設置,以太網(wǎng)接口通過(guò)擴展以太網(wǎng)接口芯片實(shí)現,通過(guò)以太網(wǎng)接口建立與網(wǎng)管中心的通信,可實(shí)現網(wǎng)絡(luò )化的管理。OOK(On/Off—Keying)調制解調電路完成IDU與ODU之間的通信,通過(guò)該電路,IDU可對ODU進(jìn)行設置發(fā)功率、收發(fā)頻率、監視ODU的工作狀態(tài)等。
1.2 軟件結構
軟件總體分為應用程序和μC/OS-II兩部分,應用程序是用戶(hù)代碼部分,采用C語(yǔ)言編寫(xiě),完成對整個(gè)系統的監控;μC/OS-II為一種嵌入式多任務(wù)實(shí)時(shí)操作系統,其大部分程序使用C語(yǔ)言編寫(xiě),還有一小部分和處理器密切相關(guān)的代碼使用匯編語(yǔ)言編寫(xiě),μC/OS-II包括了三部分,即μC/OS-II核心代碼、配置代碼和移植代碼[3]。
其中,核心代碼:包括10個(gè)C程序文件和一個(gè)頭文件,主要實(shí)現了系統調度、任務(wù)管理、內存管理、信號量、消息郵箱和消息隊列等系統功能,而這些功能的實(shí)現與處理器類(lèi)型無(wú)關(guān)。
配置代碼:包括2個(gè)頭文件,用于裁剪和配置μC/OS-II,這部分代碼根據用戶(hù)的實(shí)際需求來(lái)配置μC/OS-II系統。
移植代碼:這部分主要包括1個(gè)匯編文件、1個(gè)C程序文件和一個(gè)頭文件,這部分根據具體的處理器移植μC/OS-II系統的需要修改,它和處理器關(guān)系密切。
2 μC/OS-II在微波監控系統中的應用
2.1 應用程序中任務(wù)的設計與劃分
根據實(shí)際的需要,應用軟件劃分為7個(gè)任務(wù):液晶顯示、按鍵接收和告警、時(shí)間標志處理、遠端信息處理、數據處理、串口任務(wù)處理,如圖2所示。

圖2 應用程序中任務(wù)的劃分
(1) Task_LCD_OP:主要是處理菜單的顯示,根據不同的菜單顯示設備的相關(guān)信息,并且完成將設置數據保存到公共變量中。
(2) Task_KEY:主要完成外部按鍵信號的掃描,按照不同的按鍵轉換為不同的編碼,并把其值保存到公共變量中。
(3) Task_TIME_FLG:實(shí)現設置時(shí)間標志,以使其它任務(wù)完成定時(shí)任務(wù),因為有許多的定時(shí)任務(wù),所以設立了一個(gè)單獨的任務(wù)來(lái)設置或取消時(shí)間標志。
(4) Task_SPI_OP:通過(guò)SPI接口完成遠端信息交換處理以及數據鏈路各接口環(huán)回等設置。
(5) Task_DATA_OP:主要完成網(wǎng)絡(luò )數據管理、AD轉換、公務(wù)的控制,控制微波接口、時(shí)鐘芯片的設置和讀取,完成誤碼率的計算以及對串行E2PEOM存儲芯片數據的存取。
(6) Task_COMM1:主要是完成出串口與其它設備間通信數據的收發(fā)。
(7) Task_ODUCOMM0:主要是IDU和ODU設備的通信。
2.2 任務(wù)的創(chuàng )建
經(jīng)過(guò)分析和設計之后,就可以使用μC/OS- II所提供的函數創(chuàng )建任務(wù)[4],這里給出了如何創(chuàng )建液晶顯示任務(wù)的實(shí)例,其它任務(wù)的創(chuàng )建與之類(lèi)似,其過(guò)程如下:
OSTaskCreate (Task_LCD_OP,(void *)0, &LCDopreate[TaskStkLengh - 1],8);
Task_LCD_OP是要創(chuàng )建的任務(wù);(void *)0是傳遞給任務(wù)的參數,因為這里所創(chuàng )建的任務(wù)沒(méi)有參數,所以其值為0;&LCDopreate[TaskStkLengh - 1]是分配給任務(wù)的堆棧,這在程序中是事先定義好的,最后一個(gè)數字8是分配給該任務(wù)的優(yōu)先級。
2.4 任務(wù)優(yōu)先級的劃分
為了使整個(gè)系統的實(shí)時(shí)性能夠得到滿(mǎn)足,所以要以任務(wù)的緊迫性、關(guān)鍵性、頻繁性和中斷的重要性等為依據,對不同的任務(wù)安排不同優(yōu)先級別[5]。在系統優(yōu)先級的分配上,μC/OS-II系統級保留了0和1,用戶(hù)程序任務(wù)優(yōu)先級從2開(kāi)始,最低優(yōu)先級定義為12。
在該監控系統中,任務(wù)不同,對實(shí)時(shí)性要求也不同,通過(guò)定時(shí)任務(wù)來(lái)控制。定時(shí)任務(wù)劃分為20ms到5s多個(gè)時(shí)間級別,在同一個(gè)任務(wù)中可以再定時(shí)地處理一些事務(wù)。其中,單獨設置了一個(gè)任務(wù)Task_TIME_FLG來(lái)處理這些時(shí)間等級的劃分和管理,由于它的運行涉及到其它任務(wù)的時(shí)間標志,是一個(gè)關(guān)鍵任務(wù),所以必須將其運行優(yōu)先級設置為用戶(hù)程序的最高級別。系統中除了對設備進(jìn)行設置外,其余時(shí)間主要通過(guò)串行接口進(jìn)行信息交互,也是較為重要和緊迫的,這一工作由串口1來(lái)承擔,所以在設置Task_COMM1的優(yōu)先級次之;其次是Task_ODUCOMM0;Task_DATA_OP數據操作任務(wù)對實(shí)時(shí)性要求不高,級別隨之降低;Task_SPI_OP任務(wù)因其數據量小,故不是緊迫任務(wù);Task_KEY按鍵任務(wù)、Task_LCD_OP液晶顯示是實(shí)現人機交互的,所以實(shí)時(shí)性要求也比較低。
從以上分析可以把任務(wù)的優(yōu)先級進(jìn)行如下分配:Task_TIME_FLG為2,Task_COMM1為3,Task_ODUCOMM0為4,Task_DATA_OP為5,Task_SPI_OP為6,Task_KEY為7,Task_LCD_OP為8。
2.5 任務(wù)的調度
μC/OS-II調度的依據是任務(wù)就緒隊列表,系統從處于就緒隊列的任務(wù)中選擇一個(gè)優(yōu)先級最高的來(lái)運行,它可以管理多達64個(gè)任務(wù)。對于多任務(wù)的管理,μC/OS- II 是通過(guò)調度器完成。其中任務(wù)級的調度是由函數OSSched()完成, 而中斷級的調度是由函數OSIntExiT()完成。
本系統的任務(wù)中,Task_TIME_FLG時(shí)間標志處理任務(wù)優(yōu)先級最高,運行也最頻繁,它和其它任務(wù)切換是屬于普通的任務(wù)切換,而Task_COMM1和Task_ODUCOMM0的任務(wù)切換是屬于中斷級的切換,只有在發(fā)生中斷時(shí)才切換,正常運行時(shí)和普通任務(wù)的切換方式一樣。其余任務(wù)的切換都作為普通切換方式處理。在任務(wù)切換過(guò)程中如果當前任務(wù)需要延時(shí)判斷,為保證其它任務(wù)的正常運行,可通過(guò)調用函數OSTimeDly(2)掛起當前任務(wù),其中鍵顯部分有三級菜單,每一級菜單又有許多選項,為了提高按鍵掃描的實(shí)時(shí)性,在進(jìn)入每一級菜單后必須調用該函數掛起當前任務(wù),并掃描有無(wú)按鍵,如有則執行對應處理程序,沒(méi)有按鍵則把自己掛起,直到有按鍵方可退出。μC/OS-II如此處理,程序不會(huì )死等,按鍵和菜單顯示配合很協(xié)調,只要有按鍵就能得到及時(shí)處理。
2.6 中斷的設置與使用
在A(yíng)RM7體系的CPU中,最多可以有32個(gè)中斷源。對每個(gè)具體的中斷源,可以將其定義為快速FIQ中斷,使其具有最高的優(yōu)先級;也可以定義為向量IRQ中斷,使其具有中等優(yōu)先級,但向量IRQ的總數不能超過(guò)16個(gè)。μC/OS-II本身使用一個(gè)定時(shí)中斷源作為系統節拍中斷。
μC/OS-II響應中斷的過(guò)程:當系統接收到中斷請求后,并且CPU處于中斷開(kāi)放狀態(tài),系統就會(huì )終止當前運行的任務(wù),按照中斷向量的指向運行中斷服務(wù)子程序;當中斷運行結束后,系統就會(huì )返回到被中止的任務(wù)繼續運行,或者轉向運行另一個(gè)更高優(yōu)先級的就緒任務(wù)。
本系統中使用了兩個(gè)定時(shí)中斷源、兩個(gè)串口中斷源、一個(gè)I2C中斷源。μC/OS-II中斷的設置和初始化由target.c中的TargetInit函數完成,通過(guò)該函數實(shí)現了串口、I2C和定時(shí)中斷的初始化設置。其中VICInit實(shí)現過(guò)程如下,將中斷服務(wù)子程序的地址寫(xiě)到相應的中斷向量寄存器(VICVectAddrx),并從相應的中斷向量控制寄存器(VICVectCntlx)選中相應的中斷,將其啟用。當CPU接收到中斷請求就能找到對應中斷服務(wù)程序的地址,并轉到中斷服務(wù)程序去運行。
2.7 堆棧的設置與使用
堆棧是依據“后進(jìn)先出(LIFO)”原則組織的連續存儲空間。為滿(mǎn)足任務(wù)切換、響應中斷以及存儲任務(wù)私有數據的需要,每個(gè)任務(wù)都配有自己的堆棧。
由于lpc2214的片內Flash是256KB,片內RAM是16KB,根據需要CPU沒(méi)有擴展外部閃存,故要求代碼精練,RAM分配一定要合理。尤其是在液晶顯示任務(wù)中,由于顯示的菜單項目較多,因此任務(wù)之間切換增加了RAM的需求。如果每個(gè)任務(wù)堆棧開(kāi)辟過(guò)小,任務(wù)切換時(shí)就會(huì )出現私有數據丟失,堆棧溢出直至程序運行出錯;反之堆棧設置過(guò)大,就會(huì )使內存RAM空間緊張,因此設置堆??臻g必須適中。本系統中開(kāi)始設置顯示任務(wù)堆棧大小為64個(gè)字,調試運行中發(fā)現進(jìn)入多級菜單時(shí)會(huì )出現程序死鎖的現象,擴大對應任務(wù)堆??臻g問(wèn)題就得到解決。
3 軟件的調試環(huán)境與下載
該系統需要建立ADS1.2集成仿真環(huán)境,使用了廣州周立功單片機發(fā)展有限公司提供的專(zhuān)用工程模板。如果硬件沒(méi)有擴展外部存儲器,就使用LPC2100的工程模板;否則使用LPC2200的工程模板。在調試過(guò)程中選用DebugInFLASH模式燒寫(xiě)調試;軟硬件調試完成,可選用RelInFlash模式燒寫(xiě),后一種燒寫(xiě)方式會(huì )加密芯片,使之無(wú)法二次燒寫(xiě);如果加密之后需要重新燒寫(xiě)芯片,就必須使用ISP進(jìn)行解密之后方可燒寫(xiě),調試程序時(shí)一定要注意這點(diǎn)。
4 結束語(yǔ)
μC/OS-II應用于數字微波監控系統軟件開(kāi)發(fā)之后,系統的軟件結構更加簡(jiǎn)潔實(shí)用,系統的實(shí)時(shí)性和穩定性得到提高,設備在實(shí)際應用中表現穩定可靠,并取得一定的經(jīng)濟效益,μC/OS-II在嵌入式系統中具有廣泛的應用推廣價(jià)值。
評論