保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于USB和多线程的实时数据采集系统


ntery入口点来执行大量的初始化函数。即插用模块实现USB设备的动态插拔及配置。当硬件检测到USB设备接入时,Windows查找相应的驱动程序,并且调用它的DriverEntery例程,PnP(即插即用)管理器调用驱动程序的AddDevice例程,通知它添加了一个设备。驱动程序会收到一个包含有设备分配资源信息的启动设备的IRP,在对设备进行正确配置后,开始与硬件的对话。在运行过程中,如果设备被拔除,PnP会发出相应的IRP,驱动程序会进行盯应处理。USB设备的挂起和唤醒是由电源管理模块进行管理的。I/O功能模块完成I/O请求的工作。
  
  2.2.3应用程
  
  
  
  序设计
  
  固件程序和USB设备驱动程序的设计是USB设备开发者的工作,对于广大用户而言,与系统的交互是通过应用程序实现,而且整个实时采集系统的主要数据处理都是在这里完成的。因此,运行效率高、界面友好、具有强大数据分析和处理的应用程序的设计,也是系统设计上一个不容忽视的关键因素。应用程序的主要功能有:启动/关闭USB设备,检测USB设备,设置USB数据传输管道/端口,设置A/D,采集数据,显示/分析数据。这里,我们采用VisualC++6.0作为程序的开发环境,并且充分运用了多线程的编程思想。
  
  在这个设备中,设置4个线程:首先是1个主线程,负责用户界面,并保持中枢地位。它的生存周期也就是整个用户程序的主存期,用户的动作(例如鼠标事件、键盘事件)都会触发主线程的消息机制,从而完成对用户的响应;而3个分离的辅助线程分别负责数据的采集、数据的分析处理以及数据的显示这3个不同的任务。辅助线程是在主线程运行过程中产生的,它的生命就是线程函数本身,函数一旦return,线程就结束了。因此,辅助线程的生存周期只是整个程序生存期的一部分。
  
  MFC程序只会有一个CwinApp对象,而CwinApp派生自CwinThread,即产生了应用程序的主线程。每当需要一个额外的线程时,应先产生一个CwinThread对象,再调用全局函数AfxBeginThread(),将线程产生出来。
  
  对于辅助线程(workerthread),要为它准备一个线程函数,然后调用AfxBeginThread()。例如:CWinThread*pThread=AfxBeginThread(ThreadFunc,&param);
  
  UINTThreadFunc(LPVOIDpParam);//线程函数
  
  对于用户界面线程(UIthread),不能够光由一个线程函数来代表,因为它要处理消息,它需要一个消息循环。应该先从CWinThread派生一个自己的类,再调用AfxBeginThread()产生一个CWinThread对象。  
  结语
  
  基于USB技术的实时数据采集系统,在编程上运用了多线程思想;从硬件和软件两方面录求较佳的解决途径,并将二者结合起来,在实际中取得了良好的运行效果。
  
  
  
 

《基于USB和多线程的实时数据采集系统(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/165411.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。