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