您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

利用ColdFire uClinux实现数据征求和传输

发布日期:2011-05-09

 
    择要:先容了利用ColdFire uClinux实现数据征求和传输。这项技能被用在大型集装箱检测体系中,获取了很好的结果。
    关键词:ColdFire uClinux 数据征求

    在ColdFire上嵌入uClinux利用体系是一项比较成熟的技能,般应用在手持配置、家庭网关、财产控制中。但在数据征求应用中利用这项技能却不是很常见,缘故因由是uClinux不是及时利用体系,而数据征求应用对数据征求的及时性恳求很高。本文先容怎样利用在ColdFire上嵌入uClinux利用体系的要领来实现数据的征求和传输。

    1 硬件平台

    恣意嵌入式应用体系都离不开细致的硬件平台,这里先先容一下体系采取的硬件平台。图1所示即为硬件布局的表现图。此中,SPM是数据处理惩罚处罚模块,它控制前真个A/D变动,根据设置的征求周期将A/D变动后的数据生存在其内部的RAM中;同时发出一此克制信号。ColdFire 5307 xBoard是基于Motorola公司高性能嵌入式32位处理惩罚处罚器ColdFire 5307自行开辟的嵌入式应用开辟板。其硬件配置包括:

    ColdFire5307 90MHz 32位处理惩罚处罚器;16M SDRAM;2M Flash ROM;10Mbps以太网接口;两个UART串口;两个64针的地点和数据总线接口。

    ISC(图像控制变乱站)和IDS(图像数据变乱站)是两个变乱站,用来对体系实现控制,对图像数据实现处理惩罚处罚。XBoard和变乱站处在同一个以太网上,该以太网上还配有别的的配置。uClinux所要实现的结果是及时地将SPM上征求的数据通过以太网传到IDS上,同时汲取来自ICS的下令以对SPM举行控制。

    2 SPM和xBoard之间的连接

    uClinux须要读取SPM中的RAM,以是最好是把SPM中的RAM作为uClinux的内存地点的一部分。SPM和xBoard上MCF5307之间的硬件连接如图2所示。

    SPM中RAM的地点线、数据线和控制线直连续到CPU的总线上。除了硬件上的连接之外,还须要设置MCF5307的寄存器,为SPM上的RAM分派内存空间。XBoard在加电时起首运行debug步调,以是在debug中举行寄存器的设置是比较切合的。在debug源代码中的sysinit.c文件里的mcf5307_cs_init函数中加上下面的语句:

    MCF5307_WR_CS_CSAR5(imm,0xa000); SPM的地点从0xa0000000开始

    MCF5307_WR_CS_CSCR5(imm,0x3d40); 采取8位的读要领

    MCF5307_WR_CS_CSMR5(imm,0x01FF0001); 空间大小为1M

    将SPM控制的引脚和MCF5307的并口引脚相连,这产对SPM的控制就只需设置并口的相应位了。

    3 uClinux下的及时性

   
uClinux并不是一个及时利用体系(RTOS),怎样利用uClinux完成有及时性恳求的数据征求是须要思量的标题。由于应用中只一个及时的任务——从SPM中读取数据,以是采取克制的要领来对数据征求完的信号提供及时相应。下面的代码用来向uClinux注册IRQ7克制处理惩罚处罚步调:result=request_irq(ECM_IRQ,ecm_interrupt,0,“ecm”,NULL);

    在克制处理惩罚处罚步调中,先封闭克制,由于克制嵌套在这里是没存心义的,另有一个告急的缘故因由是SPM克制信号的低电平连续时间比较长。CPU是利用低电平来标记断信号的,以是CPU大概在SPM的一此克制信号中检测到多次克制。封闭克制后,从SPM的RAM中读取数据。由于SPM和xBoard之间的连接已得到包管,SPM的内部RAM成为uClinux的内存空间的一部分,以是读的变乱是很大抵的,只是将数据从一个地点读到别的一个地点,读完数据后打开克制。读数据之间孕育产生的克制都市被敷衍。读数据块的大小为4096字节,读完全部的数据须要2ms。以是在征求周期低于2ms的环境下,体系无法正常变乱。不过这个指标低于应用的恳求。

    4 数据的临时存放
   
xBoard上并没有大的存储配置,以是uClinux征求的数据必须及时地发送出去。以太网上通过互换机连接着多个配置,在网络繁忙的时间并不克不及包管数据会被及时地传出去。办理这个标题标要领是开辟一个缓冲区,将临时无法传出去的数据放在缓冲区中。

    由于没有MMU的支持,uClinux不克不及提供内存掩护机制,进程可以随意读取恣意内存地点。如许,在带来方便的同时也增长了一些贫苦。方便的一壁表如今可以在进程中开辟缓冲区,在内核中用同样的地点利用缓冲区;倒霉的一方面表如今开辟动态内存必须非常鉴戒,不克不及和别的进程孕育产生重叠。

    在进程中开辟了50个数据缓冲片,这些缓冲片通过三个双向链表维持形成缓冲区。全部的缓冲片被挂在一个称为list的双向链表中,退出进程的时间,应该将这些动态内存开释。同时,将存有有效数据(即尚未被发送出去的数据)的缓冲片放在称为dirty的双向链表中,将可以利用的缓冲片放在称为clean的双向链表中。克制处理惩罚处罚步调每次从clean链表中获取一个缓冲片,存入数据后放到dirty链表中;相反,发送进程每次从dirty行列步队中取一个缓冲片,发送其生存的数据,然后把它放到clean链表中。如许可以在肯定步调上为网络速率的稳固提供缓冲。

    5 uClinux上运行任务的阐发

   
在uClinux上运行了三个任务:读取征求数据、通过以太网发送数据、汲取和实行来自ICS的下令。此中的读取征求数据任务对及时性有恳求,把它用克制处理惩罚处罚步调来实现,而别的的两个任务则通过用户进程来实现。通过以太网发送数据的任务和读取征求数据的任务其享一个缓冲区,通过ioclt函数在它们它们转达缓冲区双向链表的地点。以是还须要为SPM注册一个驱动步调,这也是在uClinux利用中比较分外的进程和内核通讯的要领。同时,把对SPM的设置和查问等利用也包装在这个驱动步调里同,这些利用都是通过ioctl函数向程提供接口。注册驱动步调的函数是:

    result=register_chrdev(ECM_MAJOR,“ecm”,&ecm_fops);可见,这里把SPM作为一个字符型的配置,由于缓冲区是共享,以是必须提供一个锁相制,使得在某个进程向缓冲片中写数据时,别的的进程不读或写该缓冲片。

    UClinux不但在信息家电、低端网络配置和财产控制范畴中有较广的应用,并且在大抵的数据征求和传输方面也有了应用方案。