- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 1
PAGE 1
基于Linux的嵌入式工业测控系统设计方案
摘要:该文针对当前工业掌握领域网络掌握技术的快速进展,给出了一种应用于测控系统的基于Linux的嵌入式系统的设计方案。利用Linux自身供应的条件编译系统,初步解决了Linux作为嵌入式操作系统面临的一些问题。并利用实时应用接口(RTAI)来增加Linux的实时性,引入实时硬件抽象层结构(RTHAL),利用Linux的内核模块机制供应实时服务和完成实时任务,解决了Linux实时性不足的问题。通过数据采集程序的实现给出了在RTAI-Linux环境下开发实时应用程序的设计方法。 1、前言 随着网络掌握技术的快速进展,工业以太网得到逐步完善,在工业掌握领域获得越来越广泛的应用。工业以太网使用了TCP/IP协议,便于联网,并具有高速掌握网络的优点。随着32位嵌入式CPU价格的下降,性能指标的提高,为嵌入式系统的广泛应用和Linux在嵌入式系统中的进展供应了宽阔的空间。由于Linux的高度敏捷性,可以简单地依据应用领域的特点对它进行定制开发,以满意实际应用需要。 2、基于Linux的嵌入式系统在测控系统中的设计 计算机测控系统本质上就是计算机掌握系统,为了对被控对象实施掌握,对其参数和状态进行检测是必不行少的。 2.1 测控系统整体设计 测控系统以基于Linux的嵌入式系统为,应用程序可通过网络进行更新,通过键盘进行人机对话,数据可通过LCD现场显示。重要数据可以文件形式保存在Flash存储器中,数据和报警信息还可通过串口向上位机传输,也可通过以太网口向Inernet发布信息。用户通过显示界面查看设备状态,设置设备参数,实现远程监控、远程维护。 2.2 总体框图[1] 2.3 嵌入式系统硬件设计 2.3.1 硬件框图 考虑一般测控系统对嵌入式系统要求比较多的功能有:键盘接口、显示接口、A/D(或D/A)转换单元、可扩展的UO接口、打印机接口、与PC机通信的串行接口、以太网口等。实现的嵌入式系统硬件框图如图2-2所示[3]: 2.3.2 Linux下设备驱动程序的开发 Linux系统中,内核供应爱护机制,用户空间的进程一般不能直接访问硬件。Linux设备被抽象出来,全部设备都看成文件。用户进程通过文件系统的接口访问设备驱动程序,设备驱动程序主要完成如下功能: ①探测设备和初始化设备;②从设备接受数据并提交给内核;③从内核接受数据送到设备;④检测和处理设备错误。 3、基于 RTAI-Linux的嵌入式系统的软件实现 3.1 RTAI实时硬件抽象层的实现机理 引入新的数据结构rt_hal,形成了实时硬件抽象层RTHAL(Real Time Hardware Abatract Layer),rt_hal结构体的定义如下: struct rt_hal { struct desc_struct*idt table; void(*disint)(void); void(*enint)(void); unsigned int(*getflags)(void); void(*setflags)(unsigned int flags); void(*mask_and_ack_8259A)(unsigned int irq); void(*unmask_8259A_irq)(unsigned int irq); void(*ack_APIC_irq)(void); void(*mask_IO_APIC_irq)(unsigned int irq); void(*unmask_I0_APIC_irq)(unsigned int irq); unsigned long *Io_apic_irgs; void*irq_controller_lock; void*irq_desc; int *irq_vector; void *irq_2_pin; void* ret_from_intr; struct desc_struct *gdt_table; volatile int*idle_weight; void (*lxrt_cli)(void); }; 在usr/src/Linux/arch/i386/kernel/irq.c中初始化为rthal:
原创力文档


文档评论(0)