QNX下PEX8311多路实时数据采集的驱动设计

来源 :电子世界 | 被引量 : 0次 | 上传用户:cnzzzbjzbgs
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】实时操作系统QNX在工业领域中的应用越来越广泛,在高速数据采集方面QNX能最大限度地发挥实时操作系统的优势。本文介绍了QNX下PEX8311多路实时数据采集驱动的开发流程。详细阐述了驱动程序和应用程序之间利用共享内存方式完成进程通信的具体实现方法。最后,应用程序采用无锁环形缓存进行多路数据分发的实现。该方法也为其他操作系统实现多路实时数据采集驱动程序提供了一种全新的方法。
  【关键词】QNX;PCI;共享内存;PEX8311;环形缓存
  1.QNX多路实时采集卡
  多路实时采集卡由基于PCI接口PEX8311和FPGA的连接组成。FPGA可以同时采集16路数据,每路数据采样率达到200k且每路可以单独设置采用率,因此最高采用率可以达到3.2M。PEX8311采用DMA工作模式中的demand方式将采集到的数据传输给运行在CPU上的QNX。驱动程序利用QNX实时性高的特点把采集到的数据实时存入到用户程序和驱动程序都可以访问的共享存储空间中。驱动进程和应用进程利用共享内存方式交换采集数据,避免了不必要的中间环节,节省了系统开销,增强了系统的实时性。
  2.采集卡驱动设计
  (1)资源管理器交互建立
  资源管理器是QNX操作系统实现与用户程序交互数据的通道,应用程序中使用到的open(),close(),read(),write()等函数通过资源管理器接口映射到底层函数对硬件相应的操作。实现流程如下:
  dispatch_create();函数实现用户程序与资源管理器交互所需要的通道
  iofunc_func_init();该函数初始化应用程序功能函数层接口
  iofunc_attr_init ();该函数初始化设备属性接口
  resmgr_attach ();该函数向进程管理器注册,并使设备在命名空间中产生相应的名称。
  (2)硬件资源管理和分配
  和其他操作系统类似,QNX提供了丰富的PCI接口函数,可
  以方便地注册、管理、使用PCI设备。具体流程如下:
  ThreadCtl(); 设置线程对IO端口进行操作的权限
  pci_attach(); 连接到QNX提供的PCI服务上
  pci_attach_device();
  devinit.port=inf.CpuBaseAddress[0]+(j*0x200);
  devinit.intr=inf.Irq;
  探测PCI设备并取得相应设备的资源,如设备首地址、中断等。
  port_regbase=mmap_device_memory();
  设备首地址映射到内存地址,访问设备寄存器用port_regbase+offset即可。
  (3)中断注册
  QNX提供了两种连接中断的接口:
  Int InterruptAttachEvent(int intr,const struct sigevent *event,unsigned flags);
  Int InterruptAttach(int intr,const struct sigevent*(*handler)(void*, int ), const void *area, int size, unsigned flags);
  其中intr代表了中断向量号,在读取设备信息时已经被初始化在了info变量中。两个函数分别有自己的优缺点,在具体设计中应视具体情况而定。InterruptAttachEvent()函数用法简单,运行在用户空间,可以启动单独的线程去处理特定任务,优点是其应用接近linux操作系统可以方便程序移植,缺点是当中断发生时会引起上下文切换,从而使降低效率。对于InterruptAttach()函数而言,中断处理函数首先将原线程打断,然后判断中断是否需要建立新的线程处理此任务还是原线程处理此任务,所以对于不是自己要处理的中断,可以减少上下文切换的开支。本论文中采样InterruptAttach()函数处理中断,具体操作流程如图1所示。
  图1 InterruptAttach处理过程
  为了减少系统调度开销,采用图1的调度策略,即中断返回并没有创建新的线程来处理中断后的大量数据交换,而是在原线程中处理这些数据。
  图2 共享内存示意图
  (4)共享内存
  驱动进程和应用进程采用共享内存的方式传递采集到的数据,PEX8311采用DMA方式,传输数据块中包含16路的采集数据,其每次传输的数据块长度为D_size,其中,由于每路的采集率可以设置为不同的采集率,所以传输数据块中包含各路的信息量可以是不同的,例如:第一路采样率为200k,第十路采样率为100k,那么数据块中包含第一路和第十路的数据量为2:1,图2表示共享内存的示意图,共享内存的大小为Shm_size=Shm_end–Shm_start,写指针W_ptr和读指针R_ptr沿着内存增加的方向移动,当到达共享内存底部时环回到顶端,读写指针在共享内存初始化时赋值为顶端地址,写指针W_ptr只能被中断程序修改,读指针只能被应用程序修改。所以在共享内存使用上不需要信号量,只需保证写指针W_ptr不超过读指针R_ptr即可。
  当PEX8311用DMA每传输完一个数据块后产生一个中断,在中断服务程序中,除了做一些中断保护外,对共享内存的处理描述代码如下:
  bufFlag = 1;
  W_ptr += D_size;
  if(W_ptr >= Shm_start + Shm_size)
其他文献
技术所代表的逻辑和理性只能增强竞争性,但不能保障利润率。当技术与幻术相结合,技术融合进入幻术,企业的卓越表现才能与超额优势利润合二为一。幻术如何制造与派送蕴涵商品之中
目的通过建立在体大鼠肺缺血再灌注损伤模型,观察七氟烷对缺血再灌注后肺组织氧自由基(OFRs)表达的影响,探讨缺血再灌注后肺损伤和七氟烷肺保护的可能机制。方法选择96只雄性wist
单片机原理及应用课程是一门应用型的学科,具有综合性强、实践性强和工程性强等特点。围绕单片机课程特点,改变教学理念,改进教学方法,改革考核方式,加强实践环节等,对单片机教学进
介绍了直流系统三种运行方式及接地极线路不平衡保护的原理与配置,分析了单极大地回线接线方式下接地极线路不平衡保护动作异常的原因,并提出了相应的解决办法。
【摘要】明确定位专业建设服务地方经济建设,充分调研行业人才需求,紧密联系师资队伍建设与校企合作,试行高职院校学生技师培养计划,创新人才培养模式。  【关键词】专业建设;校企合作;CDIO;技师  专业建设是学校建设与发展的生命线,其重要意义不言而喻。由于高职教育的特殊性。  其专业建设与区域产业发展的融合状况,是衡量学校人才培养是否适应社会经济发展需求的基本尺度,是衡量学校与区域社会经济发展是否协
软土地基沉降观测是软土路基施工中一项极其重要的工作,会直接的影响到路堤的安全和施工质量。就此,本文对沉降观测法在软基路段中的使用进行了较为深入的探究,希望能给相关人员
本文由我国中职教育现状入手,引出教学方法创新必要性。接着从利用多媒体教学法、一体化教学法、项目教学法三方面详细地阐述了教学方法创新内容、方法和意义。
笔者通过撰写一例慢性阻塞性肺疾病患者药历,对其治疗方案、病程及用药情况进行分析,从而讨论临床药师在参与临床用药过程中,在药物使用方面的作用和优势,保证临床安全、合理