摘 要: 本文設(shè)計(jì)并實(shí)現(xiàn)了車輛監(jiān)控調(diào)度系統(tǒng),在系統(tǒng)設(shè)計(jì)中采用S3C44B0X做為處理器,并對(duì)嵌入式系統(tǒng)中開發(fā)中的幾個(gè)關(guān)鍵技術(shù)進(jìn)行了分析:操作系統(tǒng)內(nèi)核調(diào)度機(jī)理,基于狀態(tài)機(jī)的程序設(shè)計(jì)和硬件設(shè)計(jì)。
關(guān)鍵詞:車輛調(diào)度;狀態(tài)機(jī)、操作系統(tǒng)。
一、車輛調(diào)度系統(tǒng)的整體設(shè)計(jì)
整個(gè)系統(tǒng)包括四個(gè)部分(1)通信主站;(2)車載從站;(3)通信鏈路。(4)系統(tǒng)監(jiān)控部分。下面對(duì)各個(gè)部分的功能做一個(gè)簡單的介紹。
(1)通信主站:完成信息的轉(zhuǎn)發(fā),它是連接系統(tǒng)監(jiān)控部分和車載從站的紐帶,它將從系統(tǒng)監(jiān)控部分來的信息轉(zhuǎn)發(fā)給車載從站。并且接收車載從站的信息,并將信息上傳給系統(tǒng)監(jiān)控部分。
(2)車載從站:被監(jiān)控的對(duì)象,接收監(jiān)控調(diào)度命令,并可以返回自己的狀態(tài)信息。狀態(tài)信息的取得是依靠在車載從站中的GPS接收機(jī)來完成車輛位置和速度信息等的采集工作。
(3)通信鏈路:完成通信主站和車載從站的信息傳遞及通信主站和系統(tǒng)監(jiān)控部分的信息交互。其中前者在本次設(shè)計(jì)中是以GSM手機(jī)模塊做為通信的工具,而后者是采用RS232或USB來實(shí)現(xiàn)的。
(4)系統(tǒng)監(jiān)控部分:以圖形的方式將被監(jiān)控車輛的位置信息顯示在電子地圖上(GIS,地理信息系統(tǒng)的采用),并且可以顯示其狀態(tài)等文字信息。并且可以通過系統(tǒng)監(jiān)控部分的人機(jī)界面來完成調(diào)度命令等信息的輸入。由于在很多的論文中包含了這些車輛監(jiān)控系統(tǒng)的基本組成元素,所以在這里就簡單的介紹一下。相關(guān)內(nèi)容可以參考有關(guān)的論文資料。下面重點(diǎn)討論UC/OS-II的內(nèi)核調(diào)度機(jī)理、操作系統(tǒng)的移植、基于狀態(tài)機(jī)的嵌入式系統(tǒng)程序開發(fā)和硬件設(shè)計(jì)方面的問題。圖一給初一個(gè)車輛監(jiān)控系統(tǒng)的示意圖。
二、操作系統(tǒng)的內(nèi)核調(diào)度機(jī)理
由于本系統(tǒng)對(duì)時(shí)性要求不是很強(qiáng),采用了UC/OS-II這種簡單的源碼開發(fā)的操作系統(tǒng)。由于UC/OS-II是以任務(wù)為基礎(chǔ)進(jìn)行調(diào)度的。所以系統(tǒng)中所要處理的中間結(jié)果或響應(yīng)外部的輸入和輸出,都應(yīng)該在任務(wù)中完成。任務(wù)的調(diào)度是基于優(yōu)先級(jí)的(UC/OS不支持時(shí)間片輪轉(zhuǎn)的方法)。在多任務(wù)調(diào)度開始后,時(shí)鐘節(jié)拍開始工作,時(shí)鐘節(jié)拍產(chǎn)生周期性的中斷,時(shí)鐘節(jié)拍提供延時(shí)或超時(shí)的依據(jù)。多任務(wù)啟動(dòng)之前應(yīng)該先進(jìn)行初始化的工作,包括CPU、TCB(任務(wù)控制塊)、ECB(事件控制塊)和操作系統(tǒng)本身的初始化等。初始化完畢后多任務(wù)啟動(dòng),系統(tǒng)總是運(yùn)行就緒狀態(tài)優(yōu)先級(jí)最高的任務(wù)。由于任務(wù)本身是一個(gè)無限的循環(huán),所以任務(wù)中必須包含引起任務(wù)切換的函數(shù),如OSTimeDly()、OSSemPend()等,執(zhí)行到這些函數(shù)時(shí)將引起任務(wù)的切換,即任務(wù)的調(diào)度。任務(wù)切換之前應(yīng)該保護(hù)現(xiàn)場。任務(wù)之間要進(jìn)行通信,通信的方式很多,可以采用全局變量、共享存儲(chǔ)區(qū)等一些常用的方式,但在采用UC/OS-II的系統(tǒng)中任務(wù)之間的通信更多采用信號(hào)量、消息郵箱等進(jìn)行。
三、操作系統(tǒng)的移植
將UC/OS-II這個(gè)操作系統(tǒng)移植到三星公司ARM7TDMI S3C44B0X上要注意OSCtxSW()這個(gè)任務(wù)切換函數(shù),其中任務(wù)切換的核心是利用出棧指令將各個(gè)任務(wù)的工作現(xiàn)場加以恢復(fù)。利用中斷返回指令改變PC的指針達(dá)到任務(wù)切換的目的。它實(shí)際上是從任務(wù)堆棧中恢復(fù)處理器所有的寄存器,并且執(zhí)行中斷返回指令。實(shí)際的移植是用軟件來模擬中斷的發(fā)生。移植中的關(guān)鍵問題是如何構(gòu)造任務(wù)堆棧及任務(wù)切換時(shí)的出棧順序。而任務(wù)區(qū)堆棧初始化主要是模擬任務(wù)被中斷后堆棧中的內(nèi)容。另值得注意的是開關(guān)中斷的函數(shù)OS_ENTERCRITICAL()和OS_EXIT_CRITICAL()這個(gè)函數(shù)。這兩個(gè)函數(shù)實(shí)現(xiàn)了對(duì)臨界區(qū)內(nèi)容的保護(hù)。
四、基于狀態(tài)機(jī)的程序設(shè)計(jì)
整個(gè)系統(tǒng)的軟件設(shè)計(jì)采用任務(wù)加狀態(tài)機(jī)的設(shè)計(jì)方法,由于系統(tǒng)中采用了UC/OS-II的操作系統(tǒng),所以系統(tǒng)中所有事件處理都采用任務(wù)調(diào)度的方式,任務(wù)在操作系統(tǒng)得調(diào)度下運(yùn)行。而對(duì)于每個(gè)任務(wù)采用基于狀態(tài)機(jī)的設(shè)計(jì)方法,引起系統(tǒng)中某個(gè)狀態(tài)發(fā)生轉(zhuǎn)移的事件可能是信號(hào)量、也可能是其它的事件。下面對(duì)狀態(tài)機(jī)的有關(guān)內(nèi)容加以介紹。
狀態(tài)機(jī)可以看成是一個(gè)狀態(tài)和轉(zhuǎn)換的圖,描述了應(yīng)用程序?qū)邮盏绞录捻憫?yīng)。
狀態(tài)機(jī)的執(zhí)行:狀態(tài)機(jī)在某個(gè)時(shí)刻處理某個(gè)事件而在處理另外的事件之前必須完成對(duì)這個(gè)事件的處理并得到結(jié)果。
基于狀態(tài)機(jī)的程序執(zhí)行過程是這樣的:在任何時(shí)候都存在一個(gè)或者多個(gè)狀態(tài)機(jī)活動(dòng)的狀態(tài)。如果一個(gè)狀態(tài)是活動(dòng)的,那么離開這個(gè)狀態(tài)的轉(zhuǎn)換可能會(huì)激發(fā),引起一個(gè)事件的執(zhí)行,并使得另一個(gè)狀態(tài)或位于初始狀態(tài)位置的狀態(tài)激活(下一個(gè)狀態(tài)處于初始狀態(tài))。
狀態(tài)機(jī)它是說明狀態(tài)機(jī)的對(duì)象在對(duì)象自己的生命期中事件的所經(jīng)歷的狀態(tài)序列以及它們對(duì)那些事件的響應(yīng)??梢赃@樣理解狀態(tài)機(jī)狀態(tài)機(jī)是對(duì)象的狀態(tài)在事件的作用下從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)?! ?
狀態(tài)機(jī)中的幾個(gè)基本概念:
1.狀態(tài)(state):是指在對(duì)象的生命期中的一個(gè)條件或狀況,在此期間對(duì)象將滿足某些條件、執(zhí)行某些活動(dòng)或等待某些事件。
2.事件(event)是對(duì)一個(gè)在時(shí)間和空間上占有一定位置的有意義的事情的說明。在狀態(tài)機(jī)中一個(gè)事件的產(chǎn)生可以引起一次狀態(tài)轉(zhuǎn)換。
3.轉(zhuǎn)換(transition)是兩個(gè)狀態(tài)之間的一種關(guān)系,它指明對(duì)象在第一個(gè)狀態(tài)中執(zhí)行的一定的動(dòng)作,并當(dāng)特定事件或特定條件滿足時(shí)進(jìn)入第二個(gè)狀態(tài)。
在嵌入式系統(tǒng)的程序設(shè)計(jì)中,應(yīng)該注意的另一個(gè)問題是函數(shù)的可重入問題, 可重入函數(shù)可以被遞歸調(diào)用,可以同時(shí)被兩個(gè)或多個(gè)進(jìn)程調(diào)用,這就要求在編譯的時(shí)候要為可重入函數(shù)提供一個(gè)模擬堆棧區(qū)。
圖二是設(shè)計(jì)中采用狀態(tài)機(jī)這種設(shè)計(jì)方法設(shè)計(jì)的系統(tǒng)程序中LCD顯示部份。下面是對(duì)圖二的解釋。
其中菜單1是顯示歡迎界面(就是上面提到的狀態(tài));菜單2是發(fā)送短消息;菜單3是記錄發(fā)送短消息內(nèi)容的;菜單4是用來讀取接收到的短消息。具體的狀態(tài)轉(zhuǎn)移過程是這樣的,當(dāng)顯示處于歡迎界面的時(shí)候,在這個(gè)狀態(tài)下,如向下的按鍵被按下(這就是一個(gè)事件)或發(fā)送短消息的鍵被按下,則系統(tǒng)狀態(tài)轉(zhuǎn)移到菜單2(發(fā)生了一次狀態(tài)轉(zhuǎn)移,下面和這是類似的,故相應(yīng)的分析省略了。);在這個(gè)狀態(tài)下,當(dāng)向下按鍵被按下或系統(tǒng)要輸入發(fā)送短消息的內(nèi)容時(shí)候,系統(tǒng)狀態(tài)從菜單2進(jìn)入菜單3;在這個(gè)狀態(tài)下,當(dāng)向下的鍵盤被按下,系統(tǒng)的狀態(tài)轉(zhuǎn)移到菜單4;讀取短消息結(jié)束時(shí),系統(tǒng)狀態(tài)返回到歡迎界面。實(shí)際的系統(tǒng)還有返回按鍵等,這里只是用這個(gè)圖簡單說明采用狀態(tài)機(jī)的程序設(shè)計(jì)方法。
五、硬件設(shè)計(jì)
為了從分利用S3C44B0X的時(shí)鐘頻率高的特點(diǎn),減小S3C44B0X在取指和存取數(shù)據(jù)的延遲,系統(tǒng)中采用將代碼固化在FLASH中,并在系統(tǒng)啟動(dòng)后將代碼從FLASH拷貝到SDRAM中運(yùn)行。并且系統(tǒng)中采用PDIUSBD12做為通信主站和PC上的系統(tǒng)監(jiān)控部分之間通信。比起RS232串行通信方式,速度有很大的液提高。尤其在調(diào)度的車輛數(shù)量比較多的時(shí)候其速度優(yōu)勢是比較明顯的。
六、總結(jié)
經(jīng)過系統(tǒng)的運(yùn)行,系統(tǒng)達(dá)到了設(shè)計(jì)的要求。
參考文獻(xiàn)
[1]一種嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)程序開發(fā)模型史曉龍等《計(jì)算機(jī)工程與應(yīng)用》2004-5
[2]《軟件模型設(shè)計(jì)基礎(chǔ)》曹偉(來自中國系統(tǒng)分析員)。
[3] S3C44B0X RISC MICROPROCESSOR PRODUCT OVERVIEW。
[4]嵌入式實(shí)時(shí)操作系統(tǒng)Uc/OS-II(第二版)邵貝貝等譯北京航空航天大學(xué)出版社。
[5]實(shí)時(shí)操作系統(tǒng)UC/OS-II在196KC上的移植 王巍等《工業(yè)控制計(jì)算機(jī)》2003年16卷第5期