Windows Embedded CE 6.0是非常优秀的嵌入式系统,对其内核的学习对我们开发、移植驱动和应用程序,对开发、移植嵌入式系统都非常有好处。
1.Windows Embedded CE 6.0系统的一些关键特性
◆32位多任务操作系统。
◆多任务抢占、硬实时。
◆支持的处理器体系结构:ARM, x86, SH4, MIPS。
◆组件化。
◆Based on Win32 API Set,桌面系统的一个扩展子集,超过2000个函数可以使用。
◆标准的Portable Executable(PE)文件格式。
另外需要注意的是Platform Builder开发工具集成的Visual Studio中,作为后者的一个插件。开发Windows Mobile 6.x时使用的还是独立的Platform Builder for Windows Mobile,相信到Windows Mobile 7.0时会有所变化。
作为通用性桌面操作系统的Windows XP取得了巨大的成功,关于其系统特性请看这。所以微软又推出了Windows XP Embedded。与Window XP Embedded需要借助第三方插件才能实现实时操作系统相比,Windows Embedded CE 6.0是具有32 位本机实时支持的统一内核的。微软另一款具有本机实时支持统一内核的嵌入式操作系统是Windows Embedded NavReady。
2.系统架构
下图为Windows CE 5.0系统架构,与下下6.0的架构图相比,我们发现:
(1).5.0时的NK.EXE被分为6.0的NK.EXE(交给OEM开发)和Kernel.DLL(微软开发)。
(2).驱动分成内核态和用户态。
(3).从图上看不出来的内存架构变化。 #p#
以下为Windows Embedded CE 6.0系统总架构:
以下为更详细的架构图,结合上图我们可以看到:
1.OEM商主要承担OAL模块(包括:NK.EXE和Bootloader)以及内核态驱动的开发。
2.其实从现在的市场来看OEM商有时也会负责应用和用户态驱动的开发。
注:ISV(Independent Software Vendors):独立软件开发商。
3.中断机制
下图为中断模型:
(1).设备发起一个硬件中断。->
(2).内核(Kernel.DLL)响应该中断,并call对应的中断服务例程(ISR)。->
(3).中断服务例程快速处理该中断。->
(4).驱动中的中断服务线程(IST)被通知处理该中断,这里内核使用Event通知IST。
这个过程中涉及到的ISR和IST都会处理中断,但有所不同,前者的中断级别更高,所做的工作也很简单,而后者做主要的处理工作。
4.线程、线程调度、线程同步
线程是被系统独立调度和分派的基本单位,当系统创建一个进程时,至少会存在一个线程(主线程)。所以进程可以被理解为一个壳子。关于线程更多基本知识在此略去。应用程序一般运行在248-255优先级,被创建的线程默认优先级为251。
另外我们要注意的一个很重要问题是优先级反转(Priority Inversion)问题,比如现在有三个优先级不同的线程A、B、C, A的优先级***,B次之,C***。其中A和C需要的资源部分相同。处理器当前执行线程C,比C优先级更高的B有可能打断C而进入运行状态,这样C占有的资源什么时候释放就是一个未知的时间。A只有在C释放了它所需要的资源后才能被调度,A被阻塞的时间也是未知的。这样,低优先级的B先于高优先级的A被调度,优先级发生了逆转。
这个问题在XP里面不是一个严重的问题,最多A被多阻塞了一段时间。但是,在实时系统里面,特别是硬实时系统里是个很严重的问题。这个问题的解决方法一般有两种,Windows Embedded CE 6.0采用的后一种方法。
线程同步
被用于线程同步的对象有很多种:临界区(Critical Setions)、互斥体(Mutexes)、信号量(Semaphores)、事件(Events)、Interlocked Fuctions,这里对此进行简单的介绍,关于更详细的资料(比如临界区和互斥体的本质区别以及性能比较)请从网络上查阅,比如这里。在CE 6.0系统中每个同步对象都有自己独立的名字空间,比如一个空字符串"”被作为一个名字对象处理。在桌面系统中所有同步对象是共享名字的空间的。
【编辑推荐】
- Windows Embedded CE 6.0 R3 ***嵌入式系统发展趋势
- 浅析Windows Embedded CE下Native C++的开发
- 点评Windows Embedded CE 6.0 R3的产品差异性
- 微软发布Windows Embedded CE 6.0 R3
- 试用Windows Embedded 6.0 R3开发手记