航天科工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的刹车处理的经过要下图所显示。

航天科工 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之实时性能否满足项目的实际利用需求。

航天科工 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所著。

航天科工 3

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

     
从上图可以见见,t1基本可忽略不计,t2约为1.8ms,t1+t2勿至2ms,说明这之中止延迟小于2ms。

当使用高电平中断,且IST中生出出口调试信息经常的波如图-4所展示。

航天科工 4

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

     
从上图可以见见,t2的岁月大体为1.8ms,两次等暂停的日间隔约为3.8ms。中断延迟小于2ms。

每当采取高电平中断,且IST中从未出口调试信息时之波形如图-5所显示。

航天科工 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),第二独约束表示等事件给触发,红色的虚线表示线程处于阻塞的状态。

航天科工 6

              图-6 高电平触发,IST中发生延时的状态,Sleep(1000)

航天科工 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
dwTime)来窜某一样一定线程的线程额度。为了保证系统的实时性,dwDefaultThreadQuantum应该设定为一个当的值。对实时性要求比高的暂停处理线程,可以单独将她的线程额度设为0。

     
以上两栽办法是比较便于的拍卖措施,如果以了即片种方式后,系统的实时性仍然不可知满足需求,那么要考虑任何的解决办法,主要有以下几独:

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

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

发表评论

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