蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOC文档下载
 

利用RTLinux开发嵌入式应用程序

  • 资源ID:52144878       资源大小:123.00KB        全文页数:10页
  • 资源格式: DOC        下载权限:游客/注册会员    下载费用:15积分 【人民币15元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要15积分 【人民币15元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

利用RTLinux开发嵌入式应用程序

利用RTLinux开发嵌入式应用程序 上网时间 2002年06月01日 对于中国工程师来说,利用实时Linux开发嵌入式应用程序是他们面临的困难之一,本文以RTLinux为例,并结合最为业界关注的是RTAI进行探讨,尽管这两种实现方式在句法细微环节上存在差异,但工作方式基本一样,因此所讲解并描述的内容对两者都适用。 在实时任务与用户进程相互通信的过程中,有些实时应用程序无需任何用户界面即可在后台安静地运行,然而,越来越多的实时应用程序的确须要一个用户界面及其它系统功能,如文件操作或联网等,全部这些功能都必需在用户空间内运行。问题是,用户空间操作是非确定性的,而且与实时操作不兼容。 幸运的是实时Linux具有一种可在时间上减弱实时与非实时操作的机制,这种机制表现为一种称为实时FIFO的驱动程序。当insmod将rtl_fifo.o驱动程序插入Linux内核时,该驱动程序将自己注册为RTLinux的一部分,并成为Linux驱动程序。一旦插入Linux内核,用户空间进程和实时任务都可运用实时Linux FIFO。 在深化探讨实时FIFO的细微环节之前,还要回顾一下实时应用程序结构的某些部分图1。有效的嵌入式应用程序设计方法是将实时部分与固有的非实时功能分别开来表1。假如应用程序的任一部分,如用户界面、图形、数据库或网络仅需软实时性能,最好是将该部分写入用户空间。然后,仅将必需满意时序要求的那部分写成实时任务。 留意,RTLinuxPSC,便携式信号编码和RTAILXRT,Linux实时扩展的最新版本已采纳了一种可在用户空间执行软和硬实时任务的方法。 任何硬实时任务都是在RTLinux的限制下运行的,该任务一般可执行周期性任务、处理中断并与I/O设备驱动程序通信,以采集或输出模拟和数字信息。当实时任务须要告知用户进程有一个事务将发生时,它便将这一消息送给实时FIFO。每一个FIFO都是在一个方向上传送数据从实时任务到用户空间,或反之。因此,双向通信须要运用两个FIFO。任何读出或写入实时任务一侧的操作都是非模块操作,因此rtf_put和rtf_get都马上返回,而不管FIFO状态是什么。 从应用程序一侧来看,FIFO就像一个常规文件。缺省状况下,RTLinux安装程序将在/dev书目下创建64个实时FIFO节点;假如须要,还必需自己创建新的节点。例如,要创建/dev/rtf80,需采纳如下吩咐 mknod c 150 80; chmod 0666 /dev/rtf80 其中,150是实时FIFO主数,而80是rtf80的次数。 从用户进程的角度看,实时FIFO可执行标准文件操作。从实时任务来看,FIFO有两种通信方式干脆调用RTLinux FIFO功能,或将FIFO作为一个RTLinux设备驱动程序,并运用open、close、read和write操作。要想将FIFO作为一个设备驱动程序,就必需将rtl_conf.h中的配置变量CONFIG_RTL_POSIX_IO设定为1。 rtf_create_handler可设置处理程序功能。每次Linux进程读或写FIFO时,rtl_fifo驱动程序都要调用该处理程序。应留意的是,该处理程序驻留在Linux内核,因此当Linux须要调用时,从该处理程序进行任何内核调用都是平安的。从该处理程序到实时任务间的最好通信方法是运用旗语或线程同步功能。最终,FIFO驱动程序还必需对内核存储器进行配置。因此,实时线程内的rtf_create不应调用。相反,可调用init_module中的rtf_create功能及cleanup_module中的rtf_destroy功能。 例如,列表1给出了一个采纳两个FIFO的简洁数据采集应用程序的实时部分。两个FIFO都是在init_module创建,并给予minor numbers 为1和2。在调用rtf_createminor, size之前,该程序在已创建该FIFO的状况下调用rtf_destroyminor。这种状况就是另一个模块在开发过程中未被调用。然后,调用rtf_create_handlerID, pd_do_aout以注册带该实时FIFO的数据采集模拟输出功能pd_do_aout。留意,创建实时线程pp_thread_ep是因为它是周期性的,其间隔为1/100秒。 每次周期性线程得到系统限制权后,它就调用rtf_putID,dataptr,size以便将数据插入minor number为2的FIFO。Linux进程打开/dev/rtf2,从实时FIFO中读取并显示所采集的数据。该进程还打开/dev/rtf1,将数据写入其它实时FIFO。当用户移动屏幕滑动器以变更模拟输出电压时,进程就向该FIFO写入一个新的值。RTLinux便调用pd_do_aout处理程序,随后pd_do_aout利用rtf_get从FIFO获得值,并调用实际的硬件驱动程序以设置模拟输出的电压。可以看到,实时任务和用户进程是异步运用FIFO的。 任务间的存储器共享 FIFO为用户进程和实时任务的连接供应了一种便利的机制,但将它们作为消息队列更合适。比如,一个实时线程可利用FIFO记录测试结果,然后用户进程就可读取该结果,并将之存入数据库文件。 很多数据采集应用程序涉及到内核及用户空间之间的大量数据。Linux内核v. 2.2.x并没有为这些空间的数据共享供应任何机制,但v. 2.4.0版本预料会包括kiobuf结构。为解决现有稳定内核的这个缺点,RTLinux包括mbuff驱动程序。该驱动程序可利用vmalloc安排虚拟内核存储器的已命名存储器区域,它采纳的存储器安排和页面锁定技巧跟大多数Linux中bttv帧抓取器frame-grabber驱动程序所用的一样。 更详细地说,mbuff一页一页地将虚拟内存锁定到实际的物理内存页面。任何实时或内核任务,或用户进程在任何时间都可访问该存储器。通过将虚拟内存页面锁定到物理内存页面,mbuff可确保所安排的页面永久驻留在物理内存,而且不会发生页面错误。换言之,当实时或内核进程访问所安排的存储器时,它可确保VMM不被调用。留意由于实时任务执行期间实时Linux冻结标准内核的执行,任何对VMM的调用都会引起系统暂停。假如它要访问并不位于物理RAM内的虚拟存储页面,那么即使正常的Linux内核驱动程序也会引起系统故障。 由于mbuff是一种Linux驱动程序,其功能可通过设备节点/dev/mbuff实现。该节点可显示几个录入点,其中包括可将内核空间地址映射到用户空间的mmap。它还可以利用录入点ioctl来限制。然而,并不须要困难的结构及干脆调用ioctl。相反,mbuff可为ioctl调用供应一个包袱,而且仅仅调用两个简洁的功能即可配置和释放共享的存储缓冲器。 当然,不能从实时任务调

注意事项

本文(利用RTLinux开发嵌入式应用程序)为本站会员(wjdd)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开