导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→CAN接口COM组件在WinCE平台上的实现

* 65662: CAN接口COM组件在WinCE平台上的实现

   emtronixuser 
emtronixuser发表的帖子 

 CAN接口COM组件在WinCE平台上的实现
文章来源:

      控制器局域网(CAN)是一个串行、异步、多主的通信协议,它以其高性能、高可靠性以及灵活的设计受到人们的重视,应用越来越广泛。英创公司的ARM9工控主板如EM9161,EM9260等均支持CAN总线接口,并实现了基于Windows CE规范的流式驱动程序(Stream Device Driver),对于大多数基于C/C++开发环境的应用,英创公司以静态库can_api.lib形式提供了相应接口函数,客户通过相应的API函数即可完成对CAN接口的操作。但对于使用像C#这样高级语言的应用,由于一般不支持静态库的调用,因此需要新的方法来解决这个问题。我们目前采用的基本方法是在该静态库的基础上,针对CAN通讯接口的数据收发以及对出错情况监测的应用,封装一个基于CAN通讯接口应用的COM组件,该组件中提供了一套更为简洁的接口方法函数,可以方便多种开发工具的调用,如:C#、VB、LabView等。使用时客户只需在系统中一次性注册该组件,并在应用程序中引用对应的DLL或TLB文件,就能方便使用其相应的接口方法函数了。

      本文介绍的基于英创工控主板CAN通讯接口的COM组件提供五个接口方法函数:打开CAN接口,关闭CAN接口,向CAN接口写数据,从CAN接口读取数据以及读取接口错误代码。客户方调用COM组件打开CAN接口后,COM组件服务器便在组件内部创建两个线程,一个用于接收CAN接口数据,一个用于CAN通讯错误处理。数据接收线程里通过WaitForSingleObject来等待CAN接口的接收事件发生,当CAN接口收到数据后,将数据放入指定的接收数据缓存中,客户通过调用读数据函数,将数据从缓存中读出。后面会对各函数做详细的说明。

一、数组作为组件参数

      作为通信类组件,数组常常作为接口方法函数参数传递,以交换数据,COM 组件是运行在分布式环境中的,对于一个组件程序(DLL或EXE),使用者可能是在本机的某个进程内加载组件(INPROC_SERVER),也可能是从另一个进程中调用组件的进程(LOCAL_SERVER),也可能是在这台计算机上调用远程计算机上的组件(REMOTE_SERVER),同时,组件也可能是跨语言调用的,因此对于将数组作为组件参数传递时与我们常用的参数传递方法有较大区别。

      在C语言中,通常用数组名作为函数参数。如下例程,求10次得分的总和。

      int Sum( int array[10] )
      {
            int i, sum;
            for( sum =0, i = 0;i  <10; i++ )
            sum += array[i];
            return( sum );
      }

      main( )
      {
            int sum;
            int score[10] = {75,80,81,76,75,86,90,77,80,81};
            sum = Sum( score );
      }

      例中array是主调函数中的实参数组名,在被调函数中声明了形参数组,且大小为10,但实现上,在形参中指定数组大小不起任何作用,因为数组名作为实参传递时,仅是把实参数组的起始地址传递给形参数据,所以被调函数也可以声明成如下形式:Sum( int array[ ] )或Sum( int *array )。


[]

[]

[[url=http://www.emtronix.com/faq.asp]常见问题]

[[url=http://www.emtronix.com/]关于英创]


发表时间:2009年9月28日12:06:22

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:基于精简ISA总线的CE设备驱动程序文章来源:http://www.emtronix.com/art
[下一篇帖子]:工控主板EM9000同时支持标准键盘和矩阵键盘 [原创]文章来源:http://www.e