<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于S3C2440處理器和WinCE的智能車(chē)載儀表設計

基于S3C2440處理器和WinCE的智能車(chē)載儀表設計

作者: 時(shí)間:2013-12-31 來(lái)源:網(wǎng)絡(luò ) 收藏

  3 軟件設計

  軟件的整體環(huán)境為編程環(huán)境。針對本車(chē)載智能儀表硬件系統定制相應的操作系統,實(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ā)和調試。所以底層驅動(dòng)的開(kāi)發(fā)就顯得尤為重要。

  由于使用的是操作系統,所以使用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è)中間紐帶。系統在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所示。

  CAN總線(xiàn)驅動(dòng)通信流程

  圖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操作系統,界面友好。本系統可以節約成本、降低功耗,并且可維護性強,便于擴展和升級。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>