新闻中心

EEPW首页>嵌入式系统>设计应用> 基于S3C2440处理器和WinCE的智能车载仪表设计

基于S3C2440处理器和WinCE的智能车载仪表设计

作者: 时间:2013-12-31 来源:网络 收藏

3 软件设计

  软件的整体环境为编程环境。针对本车载智能仪表硬件系统定制相应的操作系统,实现对硬件的驱动。再编写应用程序,通过对应用程序的具体操作实现对系统硬件的操作,即实现系统的功能。其中非常关键的是编写CAN控制器的驱动。CAN 驱动实现应用软件对CAN控制单元的操作,以及读取CAN控制单元中的数据代码。

3.1 系统开发和移植

  嵌入式系统开发就是系统驱动层的设计,其中最主要就是BSP的开发和调试。所以底层驱动的开发就显得尤为重要。

  由于使用的是操作系统,所以使用Platform Builder定制WinCE操作系统镜像。在Platform Builder中,可以添加系统部分硬件(如液晶屏、RAM)的驱动,这些驱动已经由微软公司编写好。然后启动Bootloader,把镜像文件下载到 Flash存储器中,并配置操作系统启动文件boot.ini.

3.2 CAN总线驱动开发

  由于CAN是外部设备,所以需要将CAN的驱动以流接口驱动方式编写。流接口驱动函数被设计来与通常的文件系统API(如ActivateDevice、ReadFile、WriteFile和IOControl等)紧密匹配,即流接口驱动在应用程序中表现为一个系统文件,应用程序通过对系统文件的特殊文件进行操作从而完成对设备的操作。编写流接口文件主要用到流接口函数,也就是流接口驱动的入口点,如XXX_Init、XXX_Read和XXX_Open等。这些流接口文件与相应的API函数对应,使应用程序由相应的函数可以访问到外部设备。

  作为流接口驱动程序,CAN总线驱动程序也有一组标准函数,可完成I/O操作。这些函数提供给WinCE操作系统内核使用,它们都是流接口驱动程序的DLL文件。动态加载CAN总线驱动程序时,系统要进行注册。CAN驱动程序注册表信息:

  WCHAR * szRegKey=L“DriversBuiltInCAN”;

  WCHAR * szPrefix=L“CAN”;

  WCHAR * szDLL=L“can.dll”;

  WCHAR * szFriendlyName=L“CANDriver”;

  DWORD * DrvIndex=1;

  DWORD * DrvOrder=0;

  通过以上代码完成注册之后,调用 ActivateDeviceEx()函数进行加载驱动。

3.3 CAN总线驱动通信流程

  CAN总线控制器驱动程序主要用于设置MCP2515的波特率、MCP2515的验收过滤器、CAN消息传送模式和CAN收发数据方式。驱动程序是连接上位应用程序和硬件的一个中间纽带。系统在EVC++环境下进行CAN总线开发。

  流式驱动以文件的方式打开函数CreateFile( ):驱动成功打开后,CreateFile( )函数返回不为INVALID?HANDLE?VALUE的句柄,此句柄也是关闭驱动函数CloseHandle( )的参数。CAN设置函数DeviceIoControl( )接收由CreateFile( )函数获得的句柄及控制命令码,设置输入/输出缓冲区以及缓冲区的大小。函数执行完成后返回实际输出的缓冲区大小等。CAN总线发送与接收函数 WriteFile( )和ReadFile( ),利用驱动文件句柄、发送和接收缓冲区等参数完成数据的发送和接收,操作成功后返回实际发送和接收的字节数。

  为了不让主线程一直处于等待数据到来的状态,让主线程拥有时间令牌来操作其他事情,程序采用多线程设计,创建一个接收数据线程。接收数据线程是一个无限循环,它不断查询CAN总线数据退出标志,如果退出标志有效,则该循环结束退出。驱动程序流程如图3所示。

CAN总线驱动通信流程

  图3 CAN总线驱动通信流程

结语

  目前,基于嵌入式技术的车载仪表逐渐开始流行。本文使用基于WinCE的ARM9微处理器作为开发平台,处理速度快,功能强大;使用CAN总线技术进行信号的相互传输,CAN总线实时接收汽车部件发送来的信息,并进行处理与分析;使用WinCE操作系统,界面友好。本系统可以节约成本、降低功耗,并且可维护性强,便于扩展和升级。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭