由于购买商业化的 OSEK需要大量资金,并且很多时候不能获取源代码,因此希望有一些开源OSEK操作系统来满足研究的需要。现有的OSEK操作系统的开源实现,有 PICosl8,一个OSEK/VDX OS 2.1r1的部分实现。它专门为PICl8XXX系列微控制器设计,针对该系列微控制器硬件,特别是在内存使用方面作了高度优化。但是,它的定制能力很差,并且移植到其他平台时代码修改量很大。另外还有openOSEK项目,但是该项目一直没有开发出正式发布的版本。
Trampoline 主要是由法国通信研究所(IRCCyN)的实时系统组负责开发的。它的源代码是开放的,能够兼容OSEK/VDX OS 2.2.3标准(当前最新版本为1.1)。它目前还没有通过OSEK/VDX的官方认证,因此只能说它兼容OSEK标准,而不能说它是通过OSEK认证的操作系统。Trampoline目前能够在4个平台上运行,分别是POSIX(包括Linux、Unix、Mac OS等)系列操作系统平台、Infineon C166平台、Freescale s12x平台、Darwin/PowerPC平台,其中在POSIX系列操作系统上运行时需要libpcl库的支持。因此,即使没有微控制器,也可以在常见的Linux/x86平台上使用Trampoline。
在OSEK操作系统中,ISR(Interrupt Service Rou-tine)分成了两类,即ISRl和ISR2。ISRl不使用操作系统服务,也不能调用其他的用户定义函数。该类中断服务例程执行完了以后直接执行中断发生位置后的下一条指令,因此ISRl对任务管理没有影响,运行时消耗的资源也比较少。ISR2是可以调用其他用户定义的函数或使用部分OSEK服务的中断例程,OSEK操作系统专门为它准备了一个堆栈Frame,用作调用其他函数的执行环境。在系统生成阶段,由用户指定ISR2要调用的用户定义函数或系统调用。ISR2能够和任务之间共享资源,而这可能会造成死锁:当ISR2启动后试图获得一个已经被一个任务占用的资源时,该任务也在等待中断完成,因此ISR2和任务之间共享资源时需要使用同步机制。OSEK操作系统提供了用于资源访问的GetResource和ReleaseResource 系统调用,任务和ISR2之间可以使用它们来共享资源,但是这种方法需要关闭访问资源的中断,可能使中断长时间关闭,降低了操作系统的实时响应能力。另一种任务和ISR2之间共享资源的方法是OSEK标准所建议的方法,也就是使用OSEK PCP协议。使用这种方法时,当一个任务要获取同ISR2共享的资源时,会把它的优先级提升到比ISR2更高的优先级,当任务执行完成之后,再把优先级恢复到原来的优先级。这时ISR2更像任务,但是比普通任务有更高的优先级。
① 生成应用程序的OIL配置文件。OSEK/VDX OS是一个静态操作系统,系统对象需要在系统生成时定义。OIL是书写这种定义的标准语言。它可以定义所有的应用程序使用的各种对象(任务、中断、警报、计数器、资源、事件等)。OIL配置文件可以手工编写,也可以使用图形化开发配置工具来生成。目前Trampoline没有图形化配置工具,只能手工编写 OIL配置文件。