Windows Embedded CE 6.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供了部分工具软件,用来测量中断延迟,如ILTiming.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)

{

     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()通常在应用程序中用来设置工作线程的优先级。

  766游戏网官网   
另一方面,我们可修改线程的时刻片大小(线程额度),线程额度就会潜移默化同样优先级的线程调度。系统默认的线程额度是100ms。线程额度受设为0意味着线程将直接施行,直到被卡住或者叫再度胜似优先级的不通。修改线程额度有零星种艺术,可以以OAL的OEMInit()函数中设置dwDefaultThreadQuantum,这将修改系统默认的线程额度。也可以用安装线程额度的函数CeSetThreadQuantum(HANDLE
hThread,DWORD
dwTime)来改某平等一定线程的线程额度。为了保证系统的实时性,dwDefaultThreadQuantum应该设定也一个相宜的价。对实时性要求较高的中断处理线程,可以独立将她的线程额度设为0。

     
以上两种植办法是比较便利的拍卖措施,如果使用了马上点儿种方法后,系统的实时性仍然不能够满足要求,那么得考虑其他的解决办法,主要发生以下几只:

  • 以中断处理的机要有放到ISR中,这是一样栽艰苦而以惊险的做法,困难是为ISR中能调用的体系函数有限,危险意味着处理不当会导致系统性能急剧下降。
  • 改良外部中断的触发机制,从硬件着手,如增加硬件缓冲区,减少单位时内的中止响应次数,在IST中处理硬件缓冲区的数量,这种方式会大幅度增进系统的实时性。
  • 运双重胜主频的MCU,提高总线访问速度。

     
总之,实现一个实时系统,需要从硬件、操作系统、驱动与应用程序等各国面考虑,根据使用之求选择适合的硬件、操作系统,在软件设计时为欲时刻考虑到实时性的求。

发表评论

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