基于S3C2440處理器和WinCE的智能車(chē)載儀表設計
3 軟件設計
軟件的整體環(huán)境為WinCE編程環(huán)境。針對本車(chē)載智能儀表硬件系統定制相應的WinCE操作系統,實(shí)現對硬件的驅動(dòng)。再編寫(xiě)應用程序,通過(guò)對應用程序的具體操作實(shí)現對系統硬件的操作,即實(shí)現系統的功能。其中非常關(guān)鍵的是編寫(xiě)CAN控制器的驅動(dòng)。CAN 驅動(dòng)實(shí)現應用軟件對CAN控制單元的操作,以及讀取CAN控制單元中的數據代碼。
3.1 系統開(kāi)發(fā)和移植
嵌入式系統開(kāi)發(fā)就是系統驅動(dòng)層的設計,其中最主要就是BSP的開(kāi)發(fā)和調試。所以智能車(chē)載儀表底層驅動(dòng)的開(kāi)發(fā)就顯得尤為重要。
由于使用的是WinCE操作系統,所以使用Platform Builder定制WinCE操作系統鏡像。在Platform Builder中,可以添加系統部分硬件(如液晶屏、RAM)的驅動(dòng),這些驅動(dòng)已經(jīng)由微軟公司編寫(xiě)好。然后啟動(dòng)Bootloader,把鏡像文件下載到 Flash存儲器中,并配置操作系統啟動(dòng)文件boot.ini.
3.2 CAN總線(xiàn)驅動(dòng)開(kāi)發(fā)
由于CAN是外部設備,所以需要將CAN的驅動(dòng)以流接口驅動(dòng)方式編寫(xiě)。流接口驅動(dòng)函數被設計來(lái)與通常的文件系統API(如ActivateDevice、ReadFile、WriteFile和IOControl等)緊密匹配,即流接口驅動(dòng)在應用程序中表現為一個(gè)系統文件,應用程序通過(guò)對系統文件的特殊文件進(jìn)行操作從而完成對設備的操作。編寫(xiě)流接口文件主要用到流接口函數,也就是流接口驅動(dòng)的入口點(diǎn),如XXX_Init、XXX_Read和XXX_Open等。這些流接口文件與相應的API函數對應,使應用程序由相應的函數可以訪(fǎng)問(wèn)到外部設備。
作為流接口驅動(dòng)程序,CAN總線(xiàn)驅動(dòng)程序也有一組標準函數,可完成I/O操作。這些函數提供給WinCE操作系統內核使用,它們都是流接口驅動(dòng)程序的DLL文件。動(dòng)態(tài)加載CAN總線(xiàn)驅動(dòng)程序時(shí),系統要進(jìn)行注冊。CAN驅動(dòng)程序注冊表信息:
WCHAR * szRegKey=L“DriversBuiltInCAN”;
WCHAR * szPrefix=L“CAN”;
WCHAR * szDLL=L“can.dll”;
WCHAR * szFriendlyName=L“CANDriver”;
DWORD * DrvIndex=1;
DWORD * DrvOrder=0;
通過(guò)以上代碼完成注冊之后,調用 ActivateDeviceEx()函數進(jìn)行加載驅動(dòng)。
3.3 CAN總線(xiàn)驅動(dòng)通信流程
CAN總線(xiàn)控制器驅動(dòng)程序主要用于設置MCP2515的波特率、MCP2515的驗收過(guò)濾器、CAN消息傳送模式和CAN收發(fā)數據方式。驅動(dòng)程序是連接上位應用程序和硬件的一個(gè)中間紐帶。智能車(chē)載儀表系統在EVC++環(huán)境下進(jìn)行CAN總線(xiàn)開(kāi)發(fā)。
流式驅動(dòng)以文件的方式打開(kāi)函數CreateFile( ):驅動(dòng)成功打開(kāi)后,CreateFile( )函數返回不為INVALID?HANDLE?VALUE的句柄,此句柄也是關(guān)閉驅動(dòng)函數CloseHandle( )的參數。CAN設置函數DeviceIoControl( )接收由CreateFile( )函數獲得的句柄及控制命令碼,設置輸入/輸出緩沖區以及緩沖區的大小。函數執行完成后返回實(shí)際輸出的緩沖區大小等。CAN總線(xiàn)發(fā)送與接收函數 WriteFile( )和ReadFile( ),利用驅動(dòng)文件句柄、發(fā)送和接收緩沖區等參數完成數據的發(fā)送和接收,操作成功后返回實(shí)際發(fā)送和接收的字節數。
為了不讓主線(xiàn)程一直處于等待數據到來(lái)的狀態(tài),讓主線(xiàn)程擁有時(shí)間令牌來(lái)操作其他事情,程序采用多線(xiàn)程設計,創(chuàng )建一個(gè)接收數據線(xiàn)程。接收數據線(xiàn)程是一個(gè)無(wú)限循環(huán),它不斷查詢(xún)CAN總線(xiàn)數據退出標志,如果退出標志有效,則該循環(huán)結束退出。驅動(dòng)程序流程如圖3所示。
圖3 CAN總線(xiàn)驅動(dòng)通信流程
結語(yǔ)
目前,基于嵌入式技術(shù)的車(chē)載儀表逐漸開(kāi)始流行。本文使用基于WinCE的ARM9微處理器作為開(kāi)發(fā)平臺,處理速度快,功能強大;使用CAN總線(xiàn)技術(shù)進(jìn)行信號的相互傳輸,CAN總線(xiàn)實(shí)時(shí)接收汽車(chē)部件發(fā)送來(lái)的信息,并進(jìn)行處理與分析;使用WinCE操作系統,界面友好。本智能車(chē)載儀表系統可以節約成本、降低功耗,并且可維護性強,便于擴展和升級。
評論