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