当前位置:文档之家› VXWORKS TORNADO 与WORKBECH 的对比与区别

VXWORKS TORNADO 与WORKBECH 的对比与区别

VXWORKS TORNADO 与WORKBECH 的对比与区别
VXWORKS TORNADO 与WORKBECH 的对比与区别

VXW ORKS TORNADO 与WORKBECH 的对比与区别

1 嵌入式系统开发所面临的问题

嵌入式软件开发有别于桌面软件系统开发的一个显著特点是,它一般需要一个交叉编译和调试环境,即编辑和编译软件在主机上进行(如在PC机的WindOWS操作系统下),编译好的软件需要下载到目标机上运行(如在一个PPC目标机上的VxWorks操作系统下),主机和目标机建立起通信连接,并传输调试命令和数据。由于主机和目标机往往运行着不同的操作系统,而且处理器的体系结构也彼此不同。这就提高了嵌入式开发的复杂性。

总的来说,嵌入式开发所面.临的问题主要表现在以下几个方面。

(1)涉及多种CPU及多种OS

嵌入式的CPU或处理器可谓多种多样,包括了Pentium、MIPS、PPC、ARM,XScale等,而且应用都很广,在其上运行的操作系统也有不少,如VxWorks,Linux,Nucleus,WinCE等,即使在一个公司之内,也会同时使用好几种处理器,甚至几种嵌入式操作系统。如果需要同时调试多种类型的板子,每个板子上又运行着多个任务或进程,那复杂性是可想而知的。

(2)开发工具种类繁多

不仅各种操作系统有各自的开发工具,在同一系统下开发的不同阶段也有不同的开发工具。如在用户的目标板开发初期,需要硬件仿真器来调试硬件系统和基本的驱动程序;在调试应用程序阶段,可以使用交互式的开发环境进行软件调试;在测试阶段需要一些专门的测试工具软件进行功能和性能的测试;在生产阶段需要固化程序及出厂检测等。一般每一种工具都要从不同的供应商处购买,都要单独去学习和掌握,这无疑增加了整个公司的支出和管理的难度。

(3)对目标系统的观察和控制

由于嵌入式硬件系统千差万别,软件模块和系统资源也多种多样,要使系统能正常工作,软件开发者必须要对目标系统具有完全的观察和控制能力,例如硬件的各种寄存器、内存空间,操作系统的信号量、消息队列、任务、堆栈

此外,嵌入式系统变化更新比较快,对开发时间要求比较紧,尤其是消费类产品更是如此.如果有一套功能强大的嵌入式软件集成开发工具可以满足嵌入式软件开发各个阶段的需求,同时又使用方便,界面友好,那是最理想不过了。美国风河系统公司(以下简称为“风河公司”)推出的Workbench嵌入式软件开发平台正是这样一个“全能选手”。

2 Workbench的特点和优势

风河公司一直致力于嵌入式软件领域的研究,其历悠久的Tornado开发环境和VxWorks嵌入式操作系统。品在嵌入式领域中应用非常广泛,尤其以强实时性和稳定性而著称于世。风河公司的新一代Workbench开发平台继承了原有Tornaclo集成开发平台的一贯优势,并且功能更加强大。由于新采用了先进的Eclipoe软件框架结构,从而使整个系统更加开放和易于扩展。下面介绍它的主要优势。

2.1 开放的Eclipse平台框架

Eclipse软件框架结构是一个完整和开放的基础平台,如图1所示,它能够将图形工具以及任何必须的功能通过标准的接口集成到同一个开发环境中。目前,IBMHP及Borland等商业开发工具提供商均支持Eclipse开发平台,网上也有大量为Eclitpse平台开发插件的社区,由于Workbench符合Eclipse框架,所以这些商用的和免费的符合Eclipse平台接口的插件均可以集成到Work-bench开发环境中,这极大扩展了Workbench的功能。例如,如果用户想使用自己熟悉的配置管理工具或者编辑器,就可以找到这样一个插件并集成进来,这样用户就会感到开发过程非常适合自己的需要。

不仅如此,风河公司还对Eclipse做了多方面的增强,从而显著提高了系统的性能。例如Workbench实现了异步接口功能,需要长时间运行的任务可以在后台运行,与此同时还能继续接收开发人员的调试请求,这样不至于使开发人员做长时间的等待;另外,Workbench还优化了对目标机数据的请求机制,即系统只检索在集成开发环境当前视图中所需要的少量数据,看不见的数据则不向目标机索取,这样就大大提高了交叉调试时系统的响应速度并减少了系统负荷。

2.2 单一的全功能平台

一个嵌入式产品的软件开发,其“实质性”过程包括了从开始的硬件启动,BSP(板级支持包)及驱动的开发,到应用程序的开发,再到后来的测试、验证,直至最后的生产阶段。一般来说,每个阶段都可以找到不同的工具来使用(实际情况也大都如此)。风河公司的Workbench开发平台改变了这一现状,它以一个单一的WorkbenCh平台,提了上述开发阶段所需要的几乎所有功能。具体来说,包括了硬件系统仿真功能(有配套的硬件仿真器)、工程管理和构建系统、编辑器、版本管理、命令解释器、调试工具、系统分析工具、系统观察工具、Flash编程工具等,再加上风河公司自己开发的和第三方厂家提供的各种软件功能模块和开发工具的插件,所有这一切,都集成在Workbench这个统一的平台之下,这必将大大改善嵌入式软件的开发环境.对一个企业来讲,更可以提高效率,减少投资,简化管理。嵌入式软件开发的各个阶段以及Workbemch在各个阶段提供的功能如图2所示。

2.3广泛的适用性

Workbench平台的广泛适用性主要体现在七“多”上,即多任务、多目标、多模式、多OS、多CPU、多连接形式和多主机环境。

◆多任务。在workhech调试环境下,可以同时连接目标系统上的多个不同的任务(或者进程),每个任务都可以单独设置断点,进行单步调试。开发者再也不用象以前那样,为了调试多个任务,先断开一个任务的连接,再连接到另外一个任务上去。这就给具有多任务的目标系统开发提供了便利,尤其是需要查看多个任务之间的配合关系时,体现的优势更加明显。

◆多CPU。风河公司的Tornado开发环境可以说已经支持了全系列的主流CPU(或处理器),而Workbench也将继承这个传统。目前,推出的Workbench2.2版本已经可以支持PEN TIUM、PPC和MIPS系列的所有主流CPU。对ARM、XSCALE、SH等系列的支持正在移植和测试中,不久即将发布正式版本(Workbench 2、3)。

◆多OS。目前,Workbench2.2不仅支持VxWorks嵌入式操作系统(6.0以上版本),而且支持Linux操作系统,这确实给广大的Linux 嵌入式开发人员带来了福音。由于Linux操作系统的“免费”性质,使得其软件开发系统一直比较分散和孤立,用起来不是特别方便,有了Wor k-bench以后,嵌入式Linux的开发就同VxWorks的开发一样方便和快捷了。如果有必要的话,以后还可以增加对其他类型嵌入式操作系统的支持,因为Workbench本身是开放和可扩展的。

◆多目标。Workbench对复杂目标系统的强有力支持还表现在它可以支持同时连接多块目标板进行调试开发。更为可贵的是,这些目标板上的处理器可以各不相同,并且在目标板上运行的操作系统也可任意(既可以运行VxWorks,也可以运行Linux),而调试工作可以在同一个Workbench界面中同时进行,这无疑给一些复杂系统的调试带来了极大的便利。

◆多连接。所谓多连接,是指Workbench所在的主机和目标机之间可以有多种连接方式进行通信。如果目标系统中存在以太网接口,那就应该首选以太网连接,因为这种方式速度比较快;如果目标系统中不存在以太网接口,那也可以选用串行口进行通信连接,除了速度较慢以外,功能上与以太网连接没有什么区别。另外,在目标板初始调试阶段,还可通过风河的硬件仿真器(WlndRiv erICE/WindRiv er Probe)进行连接,观察硬件状态,以迅速定位硬件问题。

◆多模式。在Workbench中调试程序,即可以采用任务模式,也可以采用系统模式。所谓任务模式,是指各个任务之间独立运行,暂停其中一个任务的运行不影响其他任务的运行(主要用于调试各个任务);而系统模式则是指只要暂停丁系统的任何一处,整个系统都停止下来(主要用于调试中断程序)。

◆多主机。这是指Workbench可以在Windows、unux和Solaris这三大流行的主机操作系统下运行,这不仅可以适合不同开发者的使用习惯,而且在一定程度上有利于某些目标系统的开发,如使用unux主机环境调试运行Linux系统的目标板(但这并不是必须的)。

2.4 丰富易用的调试手段

(1)动态链接

用过Tornado开发环境的人都对其独特的分模块单独下载、动态链接到目标系统的功能深有体会,而Workbench也完全继承了这个特性。有了这个功能,就使开发者不必将所有应用模块都编写完成再进行调试,也不用每次将应用模块和操作系统编译到一起然后下载调试。可以编好一个小模块,如果想进行验证,只需将这个小模块(哪怕只是一个函数)编译然后下载到目标板中就行了,这大大加快了调试验证的速度,尤其是目标板和主机之间是低速连接的情况,更能体现出其优势所在。

(2)目标可视

对目标系统的可视化是每一个嵌入式软件开发人员都希望得到的功能,为达到这一目的,Workbench除了提供一般的查看内存、寄存器、变量、调用树等的传统视图工具外,还提供了几种增强的系统查看工具:目标浏览器、系统观察器和SCOPETO0LS工具集。目标浏览器可以用来查看目标系统每一个系统资源的使用情况和当前状态,包括系统各个模块、任务、信号量、消息队列、内存、堆栈等。系统观察器可对系统事件提供详细的分析和图形化的可视效果,同时还可展示在目标机上执行应用程序的相关任务、中断以及系统对象之间复杂的交互作用。它能够清楚地显示上下文变化以及信号量、消息队列、信号、任务、用户事件和记时器一类的系统事件,就象一个软件的“示波器”。应用这些系统查看工具,开发人员可以很容易地去诊断和解决嵌入式系统中存在的调度问题(如死锁,饥饿和竞争)、性能问题(如优先级设置,资源的竞争与互斥)和定时问题等。RTI SCOPETOOLS是专门为设备类软件开发提供的一组强大的可视化工具集,用户可以动态观察整个系统平台,包括应用代码、第三方的库,甚至操作系统本身。Workbench2.2中,集成进来了用于观察函数执行效率的Prof ileScope工具,用于观察内存使用效率和检测内存泄露的MemScope工具,以及用于检测变量或指定内存位置处数值动态变化情况的StethoScope工具。另外,还有可选的用于实时跟踪代码执行情况的TraceScope工具和用于检测代码执行覆盖率的Cov erageScope工具。

3)仿真环境

在目标系统的硬件开发完成之前,往往软件系统的开发也要同步进行,Workbench提供的模拟仿真环境(只适用于针对VxWorks操作系统的应用软件开发)就提供了这种同步开发的途径。VxWorks软件仿真器运行于主机操作系统环境中,是一种从VxWorks 6.0操作系统移植过来的本地应用程序,它能够精确地实施VxWorks 6.0的高级复杂特性,包括实时进程、内存保护等。它还具有完整的文件系统和网络功能,并能调用主机系统API。这些特性使得在VxWorks软件仿真器中开发复杂的系统成为可能。例如,在VxWorks软件仿真器中可以组建多个网络,这些网络不但互相之间可以通信,还可以通过主机系统的网口与外界相连,实现一个完全真实的网络环境。一般来说,用户可以为主机系统的任何资源编写API,而在VxWorks软件仿真环境中进行调用,这极大地扩展了VxWorks软件仿真器的功能,也更便于应用软件的同步开发。

除了以上所提到的功能外,Workbench的强大调试功能还表现在支持各种类型的断点设置、方便灵活的操作系统内核配置工具,具有主机Sheu和目标机Shell,具有4种命令解释器,以及丰富的视图界面等。详细情况请参考Workbench的说明及手册,这里就不多做介绍。总之,使用Workbench给开发人员的感受就是方便灵活,功能强大,几乎无所不能。

3 Workbench与Tornado的功能对比

Workbench平台相对于Tornado平台来说,各项功能均有所增强,也有不少新加入的功能,主要的功能对比如表1所列。

Workbench是对Tornado一次脱胎换骨的升级,但目前并不能说Workbench就可以完全取代Tornado,这是因为Workbench只对Vx Works6.O以上的版本(具有“进程”的概念)进行支持,如果用户想使用VxWorks6.O以下的版本(扁平地址空间,应用程序均在内核中运行),那只能用Tomado进行开发。

4 Workbench的当前应用状况

如上所述,Workbench无疑是当前嵌入式软件开发领域中功能非常强大的一个集成开发环境,它最适合应用于复杂系统的开发或多个开发团队的合作开发。比如一个复杂的系统,需要用到多种CPU或多种目标操作系统,或者应用软件本身非常复杂,具有多个任务,并且相互之间关联紧密,或者多个项目组之间需要进行协同开发和软件模块共享,或者企业涉及到了从硬件开发,到软件开发,再到生产测试的全过程。在这些情况下,考虑使用Work-bench平台则非常合适,因为这样不仅能快速有效地进行系统开发,并且能够有效地进行项目的组织和管理,最终从整体上降低成本。

Workbench目前正式发布的是2.2版本,即将推出的2.3版本则提供了对更多种类处理器和目标操作系统的支持,其功能和适用范围也将进一步增强。在国内,已经有不少大型企业正在积极评估Workbench平台的使用,并体验其强大的开发能力和方便灵活的操作过程。在国外,已经有一些企业用Woikbench开发出来了自己的产品。相信不久以后,风河公司的Workbench开发平台将会遍及到嵌入式软件开发的各个领域,并使嵌入式软件开发成为一个令人愉悦的过程。

虚拟演播室方案

虚拟演播室是视频技术于计算机技术结合的产物,把计算机图形图像处理技术与传统的色键技术集合起来形成的。是一种新颖的独特的电视节目制作技术。 虚拟演播室技术原理:虚拟演播室技术与色键技术十分相像,他是由前景主持人为主的画面和背景画面,采用色键的方法构成一个整体,产生人物置身于背景中的组合画面。 虚拟演播室工作原理 虚拟演播室装修的总体要求: 建立一个功能完善的虚拟演播室,需要做到如下基本要求: 1、要求演播室的拾音空间首先具有较好的语言清晰度、可懂度,其次是要有良好的声音丰满度, 2、要求演播室内各处要有合适的响度和均匀度,具有相应的满足拾音要求的混响频率特性。 3、抑制影响听、拾音音质的声缺陷,防止出现声聚焦、驻波、颤动回声、低频嗡声等。 4、演播室内墙面的声学装饰考虑在装饰大方美观、造型新颖的基础上对于高中低各频段的声学处理方式,特别是低频段的声学处理方式方法。 演播室的建声指标:混响时间≤0.6S±0.05S;噪声评价曲线NR-30---NR-35。 设计的隔声门隔声量大于35dB并具有好的密封性。 5、演播室声学建声装饰所选用的材料符合国家相应的强制消防要求,要求采用达到B1、B2级标准的材料。 6、演播室声学建声装饰所选用的材料符合国家相应的强制环保要求,特别是要求甲醛的释放量为<0。1mg/m3。墙面装饰层内禁止使用不安全和危害性较高的吸声材料。 7、装饰踢脚线兼做视音频线槽并做屏蔽处理。 8、演播室配置录制指示灯和紧急逃生指示灯。 9、装饰层内的综合布线按要求做穿管处理。 10、演播室现有的位置南边部分为玻璃幕墙,不利于演播室的隔声,所以要对原幕墙部分进行隔断,制作隔声封闭处理,在保证整体装饰的美观性和隔声性的同时,还应保证演播室正常的通风换气。 11、导控室地面用防静电地板,装修过程中做好设备布线(强电,弱电),做好防雷,接地各类设施的设计施工。 12、装修预留好空调位置,并配合本台做好空调,配电等设备的安装施工。

单片机_C语言函数_中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。 (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。 80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。 80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制 (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP 具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。 在这里我们讲下注意的事项 (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。 (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。 (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。 (4)单片机复位后,TCON,SCON给位清零。 C51语言允许用户自己写中断服务子程序(中断函数) 首先来了解程序的格式: void 函数名() interrupt m [using n] {} 关键字 interrupt m [using n] 表示这是一个中断函数 m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行程序指令。 n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3 中断号中断源 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1中断 4 串行口中断 (在上一篇文章中讲到的ROM前43个存储单元就是他们,这5个中断源的中断入口地址为: 这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

Tornado_VxWorks官方培训教程1

嵌入式培训专题 微迪软件培训中心Tornado &VxWorks 培训 深圳市微迪软件技术有限公司 培训中心

嵌入式培训专题 微迪软件培训中心实时系统概念 ?实时系统是对外来事件在限定时间内能做出反应的系统。 ?指标 –响应时间Response Time –生存时间Survival Time –吞吐量Throughput

嵌入式培训专题 微迪软件培训中心实时系统与普通系统 ? 在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间?对于实时系统来说最重要的要求就是实时操作系统必须有满足在一个事先定义好的时间限制中对外部或内部的事件进行响应和处理的能力 ? 此外作为实时操作系统还需要有效的中断处理能力来处理异步事件和高效的I /O 能力来处理有严格时间限制的数据收发应用

嵌入式培训专题 微迪软件培训中心实时系统分类 ?根据不同的分类方法可以分为几种。 –方法一是分为周期性的和非周期性的(p e r i o d i c 和 a p e r i o d i c ) –方法二是分为硬实时和软实时(h a r d r e a l _t i m e 和s o f t r e a l _t i m e ) –专用系统和开放系统 –集中式系统和分布式系统

嵌入式培训专题 微迪软件培训中心实时多任务操作系统与分时多任务操作系统? 分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。?实时操作系统,主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件上必须在事件发生时能够在严格的时限内作出响应(系统响应时间),即使是在尖峰负荷下,也应如此,系统时间响应的超时就意味着致命的失败。另外,实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。

嵌入式实时操作系统VxWorks入门

嵌入式实时操作系统VxWorks入门 VxWorksVxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。 VxWorks的实时性体现在能于限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。因此,实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。本文将对这个操作系统进行一个入门级的、全面的介绍。为力求展示其全貌,全文共分五章: (1)搭建VxWorks嵌入式开发环境; (2)简要介绍VxWorks的基本组成,内核的基本结构; (3)概述VxWorks板级支持包(BSP)的概念及VxWorks的启动过程; (4)介绍VxWorks设备驱动的架构及编写方法; (5)指明VxWorks应用开发的思路,任务调度及任务同步、中断与任务的同步机制。 以上各章中将贯穿着许多实例,由于本文定位于入门级教程,所以文中的实例都将十分简单。下面我们进入第一章内容的讲解。 嵌入式系统的调试调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O 电路(构造计算机系统)的目标电路板往往是必要的。虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。但是,并非所有人都能拥有一块物理的电路板。在这种情况下,我们如何构造一个模拟的开发环境,其学习效果就如同拥有完全真实的电路板一样呢?本文试图解答此问题,主体内容包括四个方面: (1) 利用VMware等软件模拟真实的目标机; (2) 构建VMware虚拟PC上VxWorks BSP,建立Bootrom和OS映像; (3) 修改Tornado相关设置,连接宿主机与目标机,建立调试通道; (4) 写一个简单的应用程序并下载到目标系统运行。 图1 嵌入式系统的调试 本章工作的最终目标为: (1)VxWorks在VMware启动成功并顺利运行,的开发模型: 图4 PC作为目标机 很遗憾,这种方法实际上非常麻烦,同时开动两台PC进行调试将使你和你的室友饱受折磨,既然他如此地热切于游戏和上网。因此,我们可以借助VMware来在本机上虚拟出另一PC。 VMware的确是天才的作品!在同一PC上,利用VMware几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑。VM的意义是Virtual Machine,即虚拟出一个逻辑的电脑,它可以提供基于Intel CPU的虚拟PC系统环境,包括CPU、内存、BIOS、硬盘和其他外围硬件设备。 下面我们讲解用VMware来建立一台虚拟PC的步骤: (1)并安装VMware; (2)使用VMware向导建立一个针对VxWorks的虚拟机;

中断服务程序流程图

第一讲: 第六章I/O接口原理-接口、端口、编址 回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。 重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。 讲授内容: 6. 1 输入/输出数据的传输控制方式 一、输入/输出的一般概念 1.引言 输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。因此,CPU与外部设备之间的信息交换技术比较复杂。 CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息。 2.输入/输出端口的寻址方式 微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。

根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式 这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。 方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。优点: ①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可 以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。 ②内存与外设地址的分配,可以用统一的分布图。 ③不需要专门的输入、输出操作指令。 缺点: ①内存与I/O端口统一编址时,在地址总线根数一定的情况下,使系统中 实际可以直 接寻址的内存单元数减少。 ②一般情况下,系统中I/O端口数远小于内存单元数,所以在用直接寻址方 式来寻址这些端口时,要表示一个端口地址,必须用与表示内存单元地址相同的字节数,使得指令代码较长,相应地读/写执行时间也较长,这对提高系统的运行速度是不利的。 Mortorola公司的M6800CPU等均采用这种寻址I/O端口的方式。 3. CPU与外设之间所传送的信息类型 CPU与I/O端口之间所交换的信息,可以有下列几种类型: ①数据信息:包括数字量、模拟量、开关量等,可以输入、也可以输出 ②状态信息:这是I/O端口送给CPU的有关本端口所对应的外设当前状态 的信息。供CPU进行分析、判断、决策。 ③控制信息:这是CPU送给I/O端口的控制命令,使相应的外部设备完成 特定的操作。 数据信息、状态信息和控制信息是不同类型的信息,它们所起的作用也不一样。但在8086/8088微机系统中,这三种不同类型的信息的输入、输出过程是相同的。为了加以区分,可以使它们具有不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入/输出的数据中设置特征位。

VxWorks下几种定时延时方法的小结

编程过程中,出于需要,大家或多或少要用到定时/延时。VxWorks下提供了几种定时/延时机制,根据收集的一些资料和VxWorks相关文档,在学习和上机实验的基础上,对它们的使用以及我所遇到的问题做一个总结,希望对大家能有所帮助。不正确之处,恳请斧正。 1 taskDelay taskdelay()提供了一个简单的任务睡眠机制,也常用于需要定时/延时机制的应用中。它的格式是STATUS taskDelay(int ticks /* number of ticks to delay task */),可以看出使用该函数实现延时的单位为tick(一般系统中一个tick都是ms级的)。在VxWorks下可以这样使用taskDelay()函数:taskDelay(sysClkRateGet()*1)。函数sysClkRateGet()返回系统的时钟速率,单位是tick数/每秒(利用函数sysClkRateSet()可以改变系统的时钟速率)。在POSIX中有一个与taskdelay()相对应的函数――nanosleep()(下文中有介绍)。这两个函数仅仅是延时单位不同,效果是相同的。 利用taskdelay(),可以将调用的任务移动到具有相同优先级的就绪队列尾部。特别的,可以通过调用taskdelay(0),将cpu交给系统中其他相同优先级的任务。延时为0的调用只能用于taskdelay()中,nanosleep()认为这种调用是错误的。 taskdelay()会导致调用的任务在指定的延时期间(以ticks计数)放弃cpu,使任务处于DELAY状态(因此,其不能用于中断服务程序中)。通常其受到任务调度的影响,但在等待一些与中断无关联的外部条件时,其是有用的。如果调用的任务受到一个信号,指出其没有被阻塞或被忽略,taskDelay()将返回ERROR,并在信号处理程序运行后设置errno为EINTR。 2 WatchDog VxWorks提供了一个看门狗定时器(watchdog timer)机制,利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。在VxWorks中,看门狗定时器作为系统时钟中断服务程序的一部分来维护。因此,与看门狗定时器相联系的函数运行在系统

Vxworks任务创建编程学习代码

任务创建编程学习代码一 此代码主要的是创建若干的任务,来学习任务的创建和删除. 程序的结构是: start函数:任务创建函数 stop函数:任务删除函数 其它为任务 请大家仔细分析代码,理解任务内务的创建和删除.本代码是在tornado2.0版本调试成功. 如有疑问联系作者jdvxworks 邮箱:foxqs@https://www.doczj.com/doc/d73946143.html, /********************************* * date:2006.7.10 time:16.08 * maker: jdvxworks * aim: create 4 task * list: task0 task1 task2 task3 * change:_____________________ *********************************/ #include "stdio.h" #include "taskLib.h" #include "vxWorks.h" //#include "semBLib.h" int taskid0; int taskid1; int taskid2; int taskid3; int loopid; SEM_ID sem_id; STATUS Err; void start(void); void test0(void); void test1(void); void test2(void); void test3(void); void stop(void); void taskloop(void); //start init task void start(void) { int i,o; long p=9999999+100000;

vxWorks学习笔记

vxWorks学习笔记 vxWorks学习笔记 2006-07-20 11:141.VxWorks开发方式:交叉开发,即将开发分为主机(host)和目标机(target)两部分。 类似于dos下C语言程序的开发。 合并开发的优点:简单 缺点:资源消耗量大,CPU支持,非标准体系的支持 host (Tornado) target(vxWork) 小程序模块 vxWorks实际采用开发模式 Tornado提供:编辑,编译,调试,性能分析工具,是vxWorks 的开发工具 vxWorks:面向对象可以剪裁的实际运行操作系统 2.vxWorks启动方式 Rom方式(vxWork_rom) vxWorks直接烧入rom Rom引导方式(bootrom+vxWorks) 其中bootrom烧入rom,vxWorks可以通过从串口,网口,硬盘,flash等下载!这里的bootrom不是开发环境中的bootable,在开发环境里bootable指的是vxWorks,downloadable指application 3.调试

attach 用来在多任务调试时将调试对象绑定到某个任务 任务级调试(attach taskName) 单个任务的调试不会影响到其他任务的运行,主要用来调用户的应用程序。 全局断点:在调另一任务或本任务时,系统运行本任务断点,则停下。各任务要配合使用。 任务断点:调本任务时,系统运行到本任务断点,则停下。如果没有attach到本任务,不起作用。 一次性断点:跑到一次之后自动删除。 系统级调试(attach system) 把所有task和系统core、中断看成一个整体,可用于调试系统和中断。对中断调试,如果不是系统级调试,无论是那种断点都不起作用 !wdbAgent不在调试范围内,当任务级调试时工作在中断方式,系统级调试工作在轮询方式。 !可是使用命令行方式的调试,参看crossWind教程。 4.调度 优先级调度(无条件) 时间片:同优先级,如果时间片没有打开,任务采取先到先运行,运行完毕在交出cpu,如果打开,则轮流使用cpu。!死循环使比它优先级低的任务都不能运行。

Dos引导VxWorks

CF卡上引导VxWorks的三种方法 方法一. 直接引导: 引导扇区 >> bootrom.sys >> VxWorks 这种方法最快,但要求bootrom.sys保持连续性(可用chkdsk检查)。 方法二. FreeDOS引导: 引导扇区 >> FreeDOS >> https://www.doczj.com/doc/d73946143.html, >> bootrom.sys >> VxWorks 这种方法牺牲少量启动时间换取灵活性,因为你可以为FreeDOS增加菜单实现选择性启动,而且许多维护性工作也可在DOS下进行。 方法三. GRUB引导: 引导扇区 >> GRUB >> FreeDOS启动盘映像 >> FreeDOS >> https://www.doczj.com/doc/d73946143.html, >> bootrom.sys >> VxWorks 这种方法比上一种更进一步,你可以利用GRUB的强大功能实现多系统引导,不过不是所有的主板都支持GRUB。 grub> kernel --type=netbsd /vxWorks 一共两个分区,都是主分区。C盘为Fat32格式,设为活动分区。D盘为Fat格式,设为非活动分区。C盘装的Winxp,用XP引导Grub4DOS。把DOS的系统文件(IO.sys,MSDOS.sys,https://www.doczj.com/doc/d73946143.html,)拷贝到D盘根目录。 修改menu.lst如下: title DOS6.22 root (hd0,1) chainloader (hd0,1)/IO.SYS title DOSDOS find --set-root (hd0,1)/io.sys chainloader (hd0,1)/io.sys title FINDDOSACT find --set-root (hd0,1)/io.sys

计算机组成原理中断实验报告

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

Vxworks中断服务程序解析

Vxworks中断服务程序解析 中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect 内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect 要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题:void pciInt (int irq ){ PCLlNT RTN *pRtn; for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]); pRtn!=NULL; pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node)) (*pRtn->routine) (pRtn->parameter); } 当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。 需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks 除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码: #define INCLUDE_KERNEL #define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k 由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在<>中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。

VxWorks实时操作系统SIGNAL机制的应用

[摘要] 介绍VXWORKS实时操作系统的信号机制以及各种处理方法,特别是利用该机制实现异常情况的恢复和处理。 1.概述 信号可用来在同一任务内部或不同任务之间实现异步通信,从而改变对多个任务的控制流程。所有任务或中断服务程序均能向指定的任务发送信号,该信号的接收任务将立刻挂起当前的执行线程,而激活任务指定的信号处理程序。信号处理程序是由用户定义的,它关联与特定的信号,而且任务接收到该指定信号时的所有必要处理都在该程序中实现。信号的这种机制使得它特别适合于用来实现差错和异常处理。 2.信号屏蔽 在信号处理时,可通过信号屏蔽来选择需要进行处理的信号,接收到被屏蔽的信号,即使指定了相应的处理程序,也不作任何处理。 为了实现对信号的屏蔽,需要定义数据类型为sigset_t的变量,同时必须包含头文件“signal.h”。 下面介绍实现这一功能的函数: int sigemptyset ( sigset_t *pSet ) 该函数初始化信号集,使得该信号集不包含任何信号; int sigfillset ( sigset_t *pSet ) 该函数初始化信号集,使得该信号集包含所有信号; int sigaddset ( sigset_t *pSet , int signo ) 该函数向信号集中增加新的信号; int sigdelset ( sigset_t *pSet , int signo ) 该函数删除信号集中的信号; int sigismember ( sigset_t *pSet , int signo ) 该函数用来判断信号集是否包含某信号; int sigprocmask ( int how, const sigset_t *pSet, sigset_t *pOset ) 该函数用来设置信号屏蔽;这里,pSet为新的信号集,pOset为当前的 信号集,而how则指示处理方式,其取值与处理方式对应关系如下: SIG_BLOCK 结果信号集为当前信号集和指定信号集二者的并集,通过这种方式,可向当前信号集增添指定的元素; SIG_UNBLOCK 结果信号集为指定信号集的补集和当前信号集二者的交集;通过这种方式,可从当前信号集删除指定的元素;

vxWorks中断处理

Vxworks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求,因此,熟悉其中断的处理过程对于VxWorks操作系统的开发是至关重要的.本文通过编写和调试基于AT91RM9200处理器的VxWorks嵌入式操作系统的BSP,来讨论VxWorks操作系统的中断机制。 1 VxWorks中断处理机制及AIC AT91RM9200使用一个8优先级,可单独屏蔽中断的中断向量控制器AIC。在ARM体系结构中,有7种异常中断,对应有一个异常中断向量表。ARM体系结构要求这个异常中断向量表从0地址处开始,对于外部中断请求IRQ,系统又增加了一块由中断控制器控制的中断向量表。 2 AT91RM9200 BSP的中断驱动的实现 2.1 中断驱动中定义的函数 STATUS at91rm9200LvlVecChk (int*,int*); STATUS at91rm9200LvlVecAck(int,int); STATUS at91rm9200LvlEnable(int); STATUS at91rm9200LvlDisable(int); 2.2 高级中断控制器AIC的初始化 在usrInit()中excVecInit()函数对异常中断向量进行初始化.整个中断库,以及中断控制器的初始化都是在syslib.c中的sysHwInit2()函数中完成的.该函数在sysClkConnect()中被调用,因为系统时钟中断要在内核开放中断后就要使能,因此内核在初始化为一个多任务环境后,就产生一个usrRoot()的任务,在该任务中要建立系统时钟中断,因此调用了sysClkConnect()函数,中断库以及中断控制器的初始化也就完成了。 高级中断控制器必须进行初始化,其初始化是在板级支持包BSP的中断驱动程序中。具体的实现函数是void at91rm9200IntDevInit(void)。该函数在文件syslib.c的sysHwInit2()函数中调用。 at91rm9200IntDevInit(void)函数中主要是配置系统的钩子函数,然后对中断源向量寄存器和中断模式寄存器进行配置,同时要清除并禁止AIC中所有的中断。 2.3 中断驱动中的回调函数 在intEnt中,程序很快就进入了特权模式(SVC32),如果是中断可嵌套模式,要设置该模式下的堆栈,并且将中断深度intCnt值加1.然后跳转到intIntRtnPreempt中,在intIntRtnPreempt中为后来调用中断驱动中的函数开辟了32个字节的堆栈空间,并且将程序指针拉到at91rm9200LvlVecChk函数处执行,at91rm9200LvlVecChk函数是在中断驱动中定义的函数,是用来检测当前挂起的中断中,优先级最高的中断源。检测出最高优先级的中断后,首先要禁止该中断,因此要调用at91rm9200LvlDisable函数,该函数也在中断驱动中定义。在禁止中断的过程中,需要通过intLock和intUnLock函数来保护临界代码不被新的中断打断。

学习vxworks中遇到的问题

1预期目标 用两台pc机建立起由网络进行通讯的vxworks开发环境,开发工具是tornado 2.2 for pentium,vxworks版本为5.5。 2硬件描述 宿主机是一台装有windows xp和tornado 2.2的带有网络接口的笔记本电脑,ip设置为192.168.1.101,目标机是研华的610L型号工控机,后发现在vxworks系统下驱动工控机自带网卡有困难,于是购置了一块tp-link的pci网卡,装在工控机上,网卡芯片是realtek 8139d。 3建立开发环境的方案 目标工控机上已经装有windows xp,文件系统是fat32,经试验得知工控机支持usb-zip启动,考虑到不对windows系统产生影响,决定使用u盘启动作为系统启动的方式。用u盘启动bootrom后通过网络下载存放在笔记本电脑上的vxworks系统镜像,宿主机和目标机通过网络通讯,从而建立起x86构架下的vxworks开发环境。 4工作现状 u盘启动盘通过ultraISO和tornado 2.2自带的一些工具制作成功,并能在工控机上把bootrom 启动起来到命令行,但是在加载vxworks镜像的时候不能成功。 5遇到的问题 在bsp中添加rtl8139网卡驱动,添加驱动的过程如下 (a)下载rtl8139驱动vxworks-8139(140),是适用于tornado 2.0的。 (b)将目录下的h和src两个文件夹复制到tornado 2.2下target文件夹里,把sysRtl81x9End.c 复制到bsp文件夹下。 (c)运行命令行,在C:\Tornado2.2\target\src\drv\end\unsupported目录下运行 make CPU=PENTIUM 成功,但有警告(环境变量已设置好), 在C:\Tornado2.2\target\lib\objPENTIUMgnuvx目录下生成了rtl81x91.o。 (d)修改bsp文件夹里的config.h 修改的第一处 #elif (CPU == PENTIUM) #define DEFAULT_BOOT_LINE \ "rtl(0,0)host:vxWorks h=192.168.1.101 e=192.168.1.102 u=target pw=target" 修改的第二处 #define INCLUDE_END /* Enhanced Network Driver Support */ #undef INCLUDE_DEC21X40_END /* (END) DEC 21x4x PCI interface */ #undef INCLUDE_EL_3C90X_END /* (END) 3Com Fast EtherLink XL PCI */ #undef INCLUDE_ELT_3C509_END /* (END) 3Com EtherLink III interface */ #undef INCLUDE_ENE_END /* (END) Eagle/Novell NE2000 interface */ #undef INCLUDE_FEI_END /* (END) Intel 8255[7/8/9] PCI interface */ #undef INCLUDE_GEI8254X_END /* (END) Intel 82543/82544 PCI interface */ #undef INCLUDE_LN_97X_END /* (END) AMD 79C97x PCI interface */

实时操作系统包括硬实时和软实时的区别

一.什么是真正的实时操作系统 做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platformteam封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统 1. 首先说一下实时的定义及要求: 参见Donal Gillies 在Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。 一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows 在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。这是一个基本的问题:并不是Windows不够快或效率不够高,而是因为它不能提供确定性,所以,Windows不是一个实时操作系统。 根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver 开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费

51单片机串行口中断服务程序

51单片机串行口中断服务程序 ---------------------------------------------------------------------------- //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //编程:聂小猛。该资料来自“51单片机世界”https://www.doczj.com/doc/d73946143.html,/~dz2000,欢迎访问。 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数 //putinbuf(uchar c);模拟接收到一个数据 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置 //putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 //CR;发送一个回车换行 //************************************************************************* #include //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 #define uchar unsigned char #define uint unsigned int #define OLEN 64 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 2 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志有=1 bit inbufsign; //接收缓冲区非空标志有=1 bit inbufful; //输入缓冲区满标志满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //放入一个字节到发送缓冲区 putbyte(char c) {uchar i,j; ES=0; /*暂停串行中断,以免数据比较时出错? */ if (outlast==putlast ) { i=(0-TH1); do{i--;j=36; do {j--;}while(j!=0);

相关主题
文本预览
相关文档 最新文档