还剩1页未读,继续阅读
文本内容:
利用实现数据采集和传输摘要介绍了利用实现数据采集和传输这项技术被用在大型集装ColdFireuClinux箱检测系统中,取得了很好的效果关键词数据采集coldfireuclinux在上嵌入操作系统是一项比较成熟的技术,般应用在手持设备、家coldfireuclinux庭网关、工业控制中但在数据采集应用中使用这项技术却不是很常见,原因是coldfire uclinux不是实时操作系统,而数据采集应用对数据采集的实时性要求很高本文介绍如何利用在上嵌入操作系统的方法来实现数据的采集和传输uclinux硬件平台coldfire uclinux任何嵌入式应用系统都离不开具体的硬件平台,这里先介绍一下系统采用的硬件平1台图所示即为硬件结构的示意图其中,是数据处理模块,它控制前端的变换,根据设定的采集周期将变换后的数据保存在其内部的中;同时1spm发出一个中断信号是基于公司高性能嵌入式位a/d a/d ram处理器自行开发的嵌入式应用开发板其硬件配置包括coldfire5307xboard motorola32位处理器;;;以太网接口;两coldfire5307个串口;两个针的地址和数据总线接口coldfire530790mhz3216msdram2mflashrom10mbps(图像控制工作站)和(图像数据工作站)是两个工作站,用来对系统实现控制,uart64对图像数据实现处理和工作站处在同一个以太网上,该以太网上还配有其isc ids它的设备所要实现的功能是实时地将上采集的数据通过以太网传到xboard上,同时接收来自的命令以对进行控制uclinux spm(范文先生网收集整理)ids icsspm和之间的连接需要读取中的,所以最好是把中的作为的内存2spm xboard地址的一部分和上之间的硬件连接如图所示uclinux spm ram spm ram uclinux中的地址线、数据线和控制线直接连到的总线上除了硬件上的连接spm xboardmcf53072之外,还需要设置的寄存器,为上的分配内存空间在spmramcpu加电时首先运行程序,所以在中进行寄存器的设置是比较合适的在mcf5307spmramxboard源代码中的文件里的函数中加上下面的语句debug debug(,);的地址从开始debug sysinit.c mcf5307_cs_init(,);采用位的读方式mcf5307_wr_cs_csar5imm0xa000spm0xa0000000(,);空间大小为mcf5307_wr_cs_cscr5imm0x3d408将控制的引脚和的并口引脚相连,这产对的控制就只需设置并mcf5307_wr_cs_csmr5imm0x01ff00011m口的相应位了spm mcf5307spm下的实时性并不是一个实时操作系统(),如何使用完成有实时性要求的数3uclinux据采集是需要考虑的问题由于应用中只一个实时的任务从中读取数据,uclinux rtosuclinux所以采用中断的方式来对数据采集完的信号提供实时响应下面的代码用来向——spm注册中断处理程序(,,,,);uclinux irq7result=request_irq ecm_irq ecm_interrupt0在中断处理程序中,先关闭中断,因为中断嵌套在这里是没有意义的,还有一个重要“ecm”null的原因是中断信号的低电平持续时间比较长是利用低电平来标志断信号的,所以可能在的一个中断信号中检测到多次中断关闭中断后,从spm cpu的中读取数据由于和之间的连接已得到保证,的内部cpu spmspm成为的内存空间的一部分,所以读的工作是很简单的,只是将数据从一个ram spmxboard spmram地址读到另外一个地址,读完数据后打开中断读数据之间发生的中断都会被忽略uclinux读数据块的大小为字节,读完所有的数据需要所以在采集周期低于的情况下,系统无法正常工作不过这个指标低于应用的要求40962ms数据的临时存放2ms上并没有大的存储设备,所以采集的数据必须及时地传送出去以4太网上通过交换机连接着多个设备,在网络繁忙的时候并不能保证数据会被及时地xboard uclinux传出去解决这个问题的方法是开辟一个缓冲区,将暂时无法传出去的数据放在缓冲区中由于没有的支持,不能提供内存保护机制,进程可以随意读取任何内存地址这样,在带来方便的同时也mmu uclinux增加了一些麻烦方便的一面表现在可以在进程中开辟缓冲区,在内核中用同样的地址使用缓冲区;不利的一方面表现在开辟动态内存必须十分小心,不能和其它进程发生重叠在进程中开辟了个数据缓冲片,这些缓冲片通过三个双向链表维持形成缓冲区所有的缓冲片被挂在一个称为的双向链表中,退出进程的时候,应该将这些动50态内存释放同时,将存有有效数据(即尚未被发送出去的数据)的缓冲片放在称为list的双向链表中,将可以使用的缓冲片放在称为的双向链表中中断处理程序每次从链表中取得一个缓冲片,存入数据后放到链表中;相反,发dirty clean送进程每次从队列中取一个缓冲片,发送其保存的数据,然后把它放到clean dirty链表中这样可以在一定程序上为网络速度的稳定提供缓冲dirty clean上运行任务的分析在上运行了三个任务读取采集数据、通过以太网发送数据、接收和执行来5uclinux自的命令其中的读取采集数据任务对实时性有要求,把它用中断处理程序来实uclinux现,而其它的两个任务则通过用户进程来实现通过以太网发送数据的任务和读取ics采集数据的任务其享一个缓冲区,通过函数在它们它们传递缓冲区双向链表ioclt的地址所以还需要为注册一个驱动程序,这也是在操作中比较特别的进程和内核通信的方法同时,把对的设置和查询等操作也包装在这个驱动spm uclinux程序里同,这些操作都是通过函数向程提供接口注册驱动程序的函数是spm(,,);可见,这里把作为一ioctl个字符型的设备,由于缓冲区是共享,所以必须提供一个锁相制,使得在某个进程向result=register_chrdev ecm_major“ecm”ecm_fops spm缓冲片中写数据时,其它的进程不读或写该缓冲片不仅在信息家电、低端网络设备和工业控制领域中有较广的应用,而且在简单的数据采集和传输方面也有了应用方案uclinux。
个人认证
优秀文档
获得点赞 0