0实时性分析

     Windows Embedded CE
6.0是微软公司近来风尚的嵌入式操作系统之一,协助四种体系布局的MCU(ARM、MIPS、SH4和x86)。在无数的嵌入式操作系统中,它以温馨独特的优势脱颖而出,在总体嵌入式操作系统的市场份额中占据很大比例。相比其他嵌入式操作系统,Windows
Embedded CE 6.0首要有以下特点:

  • 图形用户界面,与桌面操作系统的图形用户界面基本一致,便于用户接受;
  • 网络连接的援助,包括PAN、LAN、WAN、BlueTooth和WIFI;
  • 多媒体的支撑,如DirectDraw、DirectShow、Directory3D及多种音频录像的编解码
  • 多语言的帮助,可以在定制系统时精选一种或多种语言;
  • 多进程的支撑,理论上支撑32K个过程,满意各个应用需求;
  • 组件化的开发形式有效收缩了成品的研发周期;
  • 依据VS2005的三合一开发条件,让开发更便宜。

      以上这一个都是大家接纳Windows Embedded CE
6.0的原故,但在很多嵌入式系统的施用场面,系统的实时性至关首要。而整个类其余实时性在很大程度上取决于它所采纳的操作系统。那么Windows
Embedded CE 6.0的实时性到底什么,能否满意我们的使用需求,或者说Windows
Embedded CE
6.0是否是一个实时操作系统?本文将基于实际使用,介绍一种在对象硬件平台上测试Windows
Embedded CE 6.0实时性的情势。

      在琢磨Windows Embedded CE
6.0的实时性在此之前,先简单介绍一下实时操作系统的定义。实时操作系统除了富有相似操作系统的基本要素外,还非得能顿时准确地响应所有不可预知的外部触发,即便在系统处于巅峰负荷情形时。这是一个特别苛刻的渴求。遵照实际运用的现象不同,实时操作系统一般分为以下两种。

  • 强健时操作系统:准时准确地响应所有的外表触发,一次退步将导致灾难性的结果。这类操作系统在航空航天和工业控制领域采用广泛。
  • 软实时操作系统:在不满足响应时限时,系统特性退化,但不会造成灾难性后果。那类操作系统在互换系统中平时有应用。

    
这里需要注意,实时操作系统并不是一个“连忙”系统,实时系统有限定的响应时间,而毫不响应越快越好。事实上,响应时间可以是纳秒级的也可以是秒级的,甚至是分钟级的。只要在系统确定的期限内不易响应所有的外表触发,我们就可以认为它是一个实时操作系统,哪怕那一个期限是一钟头。举个例子,顾客打电话给肯德基叫外卖,肯德基在确定的30分钟内将顾客点的汉堡送达,这这多少个过程就可以认为是实时性的,时限为30分钟。

     从2000年公告的WinCE3.0起头,Windows Embedded
CE就是一个实时操作系统。随着新本子的持续推出,Windows Embedded
CE的实时性也不绝于耳增进。毋庸置疑,Windows Embedded CE
6.0也是一个实时操作系统。

日常,对于实时操作系统来说,外部触发一般是指外部中断触发。所以,外部中断的响应时间(中断延迟)是衡量其实时性的一个要害标准。下边将从这一角度解析Windows
Embedded CE 6.0的实时性。

Windows Embedded CE 6.0的暂停处理过程重要分为两有些:

  • 停顿服务例程(ISR):处于根本中的低级处理程序,中断爆发时首先被调用。
  • 停顿服务线程(IST):处于驱动或者利用中的中断处理线程,由系统调度,完成大部分的暂停处理工作。

    
ISR的兑现在OAL(OEM适配层)中,它只处理最低级的刹车响应,平日是安装MCU内部的暂停控制寄存器。中断处理的机要部分在驱动或者利用的刹车处理线程中。中断处理线程与任何线程一样,使用同一个线程优先级管理体系。ISR和IST之间通过事件目的举办联合。IST中创设一个事件目的,并应用函数WaitForSingleObject()等待该事件被触发。ISR中通报内核触发相应的轩然大波目的。Windows
Embedded CE 6.0的中断处理的进程如下图所示。

766游戏网官网 1

                  图-1 Windows Embedded CE 6.0的刹车处理过程

    
可以看出,从表面中断发生到IST运行,中间经历了多少个环节,每一个环节都有时间支付,有些时日是主导规定的,有些时间随系统的场合不同而不同。但凡事中断延迟紧要可分为ISR延迟和IST延迟两局部,如图-2所示,t1为ISR延迟,t2为IST延迟。中断延迟的时刻是衡量Windows
mbedded CE
6.0实时性的一个要害指标。那么什么样在大家系统的硬件平台上测得那一个中断延迟的具体值,从而更加分析Windows
Embedded CE 6.0的实时性能否满足项目的其实使用需求。

766游戏网官网 2

        图-2 Windows Embedded CE 6.0的中断延迟模型

     
这是暂停延迟的一个概括模型,t1是ISR延迟,t2是IST延迟,t1+t2即为中断延迟,我们需要测量和计量的就是这两个值。

Windows Embedded CE
6.0提供了有的工具软件,用来测量中断延迟,如IL提姆ing.exe。它需要OAL的代码补助,并且在定制系统时设置相应的编译属性,具体用法可参看Platform
Builder
6.0的扶持。这里介绍一种借助硬件的测量方法,能在示波器上直观的看到中断延迟。

基于前文所述的间歇处理过程以及图-2所示的中断延迟模型,可透过决定MCU的一个GPIO输出引脚来帮衬测量t1和t2。具体方法如下:

  1. 在OAL的OALIntrInit()函数中,设置某一GPIO为输出口,并使其出口高电平;

  2. 在ISR的OEMInterruptHandler()函数中,将该GPIO设置为低电平;

  3. 在IST的WaitForSingleObject()函数之后,将该GPIO设置为高电平;

  4. 当外部中断触发时,GPIO会先被ISR拉低,再被IST拉高;

  5. t1是外表中断下降沿触发之后,GPIO保持高电平的光阴;

  6. t2是GPIO保持低电平的年华;

  7. t1+t2≈中断延迟时间

      实际应用的目的平台应用的MCU是S3C2410,其安装GPIO的根本代码如下。

//开首化GPIO,并安装为高

//设置GPE11为输出口

value = INREG32(&pOalPortRegs->GPECON);

OUTREG32(&pOalPortRegs->GPECON, (value & ~(3 << 22))|(1
<< 22));

//设置GPE11的IO状态为高

value = INREG32(&pOalPortRegs->GPEDAT);

OUTREG32(&pOalPortRegs->GPEDAT, (value |(1 << 11)));

在ISR中安装GPIO为低的代码如下。

//将GPE11置低

mask = INREG32(&g_pPortRegs->GPEDAT);

OUTREG32(&g_pPortRegs->GPEDAT, (mask & ~(1<<11)));

使得中的IST代码如下。

DWORD WINAPI IntrThreadProc(LPVOID ptr)

766游戏网官网,{

     while(bRun)

     {

           WaitForSingleObject(gIntrEvent, INFINITE);

           //将GPE11置高

          g_pIOPregs->GPEDAT |= (0x1 << 11);

          //RETAILMSG(1,(TEXT(“\r\nThread Run.”)));

          //Sleep(1000);

          InterruptDone(gSysIntr);

       }

       return 0;

}

     
实现以上代码后,重新编译,并将操作系统下载到目的平台上。使用双坦途的示波器测量中断触发引脚和GPIO的出口引脚,其中CH1测量GPIO的出口引脚,CH2测量外部中断引脚。

      在选择下降沿触发中断时,中断信号和GPIO的输出信号如图-3所示。

766游戏网官网 3

                              图-3 下降沿触发时的实在波形

     
从上图可以见见,t1基本可以忽略不计,t2约为1.8ms,t1+t2不到2ms,表达此时的中断延迟小于2ms。

在动用高电平中断,且IST中有出口调试音信时的波形如图-4所示。

766游戏网官网 4

                    图-4 高电平触发,IST中有延时的实在波形

     
从上图可以看来,t2的光阴约为1.8ms,五回暂停的时光间隔约为3.8ms。中断延迟小于2ms。

在利用高电平中断,且IST中从不出口调试音信时的波形如图-5所示。

766游戏网官网 5

                   图-5 高电平触发,IST中无延时的其实波形

     从上图可以看来,t2的流年大概为18μ秒,t1可以认为小于4μ秒,三次暂停之间的岁月距离为22μ秒,且可以接连稳定的正确响应。这表明Windows
Embedded CE
6.0水源的间歇延迟可达18μ秒。当然,大家很难依照五回测量的值来判断它的最低响应时限为多少,但毫秒的多少级可以验证Windows
Embedded CE 6.0的实时性基本可以满意广大的各类应用。

     需要小心的是,应用体系的实时性并不完全由操作系统的实时性决定,系统的硬件结构、软件驱动和应用程序等都会潜移默化到一切序列的实时性。此外,Windows
Embedded CE
6.0即便是实时操作系统,但它也提供了非实时的做事条件,如若定制系统时添加了非实时的连锁组件,也会影响系统的实时性。

Platform Builder 6.0提供的Remote Kernel
Tracker工具,可以扶持大家观看系统线程的履行意况。图-6和图-7所示是采取高电平触发,有1秒Sleep的事态截图,首个框表示线程执行到Sleep(1000),第二个框表示等待事件被触发,藏蓝色的虚线表示线程处于阻塞的情状。

766游戏网官网 6

              图-6 高电平触发,IST中有延时的动静,Sleep(1000)

766游戏网官网 7

                   图-7 高电平触发,IST中有延时的意况,等待事件的触发

      以上通过测量中断延迟时间,验证了Windows Embedded CE
6.0的实时性。当然,实时操作系统的概念严刻,判断一个操作系统是否为实时操作系统,还有其他部分元素,如系统的暂停管理机制、线程管理机制、同步对象的辅助、内存的管理等等。

     
实际支付进程中,怎样加强系统的实时性呢?在硬件平台、操作系统确定的前提下,我们还足以做什么工作?通过前边的剖析和骨子里测量,可以领略ISR的暂停延迟时间很短,也很难再决定。IST的推迟受系统线程调度的影响,有进一步决定的恐怕。

      Windows Embedded CE
6.0利用基于优先级的光阴片轮转算法对线程举办调度。对地处就绪态队列的线程,先分给优先级最高的线程以时日片,当时间片用完后,无论线程是否进行完毕,都退回就绪态队列中,等待下一遍的年月片分配。

     
所以,一方面,大家得以因而提升中断线程的先期级以博取更多的实践机会。Windows
Embedded CE
6.0的线程有256个优先级(0~255),0的优先级最高,255的优先级最低。线程默认的先期级为251。WinCE中用来设置线程优先级的函数有六个。

CeSetThreadPriority(HANDLE hThread,int
nPriority):可以设置0~255的有着优先级

SetThreadPriority(HANDLE hThread,int
nPriority):只好设置8个低于的优先级(248~255)

     
为了收缩中断处理延迟,应采取CeSetThreadPriority()设置更高的线程优先级。函数SetThreadPriority()经常在应用程序中用来设置工作线程的优先级。

     
另一方面,我们得以修改线程的时光片大小(线程额度),线程额度只会影响平等优先级的线程调度。系统默认的线程额度是100ms。线程额度被设为0意味着线程将一向推行,直到被打断或者被更高优先级的短路。修改线程额度有二种模式,可以在OAL的OEMInit()函数中设置dwDefaultThreadQuantum,这将修改系统默认的线程额度。也能够行使安装线程额度的函数CeSetThreadQuantum(HANDLE
hThread,DWORD
dw提姆e)来修改某一一定线程的线程额度。为了保证系统的实时性,dwDefaultThreadQuantum应该设定为一个恰当的值。对实时性要求较高的间歇处理线程,可以独立将它的线程额度设为0。

     
以上二种格局是相比便于的处理模式,假若利用了这三种方法后,系统的实时性如故无法满意需求,那么需要考虑其他的解决办法,紧要有以下多少个:

  • 将刹车处理的严重性部分放到ISR中,这是一种忙绿而又危险的做法,困难是因为ISR中能调用的系列函数有限,危险意味着处理不当会导致系统性能急剧下降。
  • 改进外部中断的触及机制,从硬件起初,如增添硬件缓冲区,缩小单位时间内的中止响应次数,在IST中处理硬件缓冲区的多少,这种艺术能极大增进系统的实时性。
  • 行使更高主频的MCU,提升总线访问速度。

     
可想而知,实现一个实时系统,需要从硬件、操作系统、驱动和应用程序等各方面考虑,依照使用的急需接纳适当的硬件、操作系统,在软件设计时也亟需随时考虑到实时性的渴求。

发表评论

电子邮件地址不会被公开。 必填项已用*标注