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