新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于OSEK/VDX标准的Trampoline操作系统研究

基于OSEK/VDX标准的Trampoline操作系统研究

作者:时间:2009-05-08来源:网络收藏

2.3 中断管理
中,ISR(Interrupt Service Routine)分成了两类,即ISRl和ISR2。ISRl不使用服务,也不能调用其他的用户定义函数。该类中断服务例程执行完了以后直接执行中断发生位置后的下一条指令,因此ISRl对任务管理没有影响,运行时消耗的资源也比较少。ISR2是可以调用其他用户定义的函数或使用部分服务的中断例程,专门为它准备了一个堆栈Frame,用作调用其他函数的执行环境。在系统生成阶段,由用户指定ISR2要调用的用户定义函数或系统调用。ISR2能够和任务之间共享资源,而这可能会造成死锁:当ISR2启动后试图获得一个已经被一个任务占用的资源时,该任务也在等待中断完成,因此ISR2和任务之间共享资源时需要使用同步机制。OSEK操作系统提供了用于资源访问的GetResource和ReleaseResouree系统调用,任务和ISR2之间可以使用它们来共享资源,但是这种方法需要关闭访问资源的中断,可能使中断长时间关闭,降低了操作系统的实时响应能力。另一种任务和ISR2之间共享资源的方法是OSEK所建议的方法,也就是使用OSEK PCP协议。使用这种方法时,当一个任务要获取同ISR2共享的资源时,会把它的优先级提升到比ISR2更高的优先级,当任务执行完成之后,再把优先级恢复到原来的优先级。这时ISR2更像任务,但是比普通任务有更高的优先级。
实现了一种延迟的ISRl和ISR2,从而使操作系统内核更小。任务和ISR的描述符都继承自一个tpl_exec_common结构,如图2所示。任务描述符在tpl_exec_common结构里增加了事件管理的数据成员,也就是evl_set和evt_wait数据成员;而ISR描述符在tpl_exec_common结构里增加了一个指向附加数据的指针,也就是static_isr_desc数据成员,static_isr_desc指向的内容可以放到ROM中,以减少RAM的使用。一个ISR对应着一个中断向量。当一个中断触发时,激活对应的ISR中断服务例程并且返回。如果是ISRl,执行完了以后将执行触发中断位置后面的代码;如果是ISR2,ISR2将运行预先定义的用户定义函数或者系统服务,然后像普通任务一样由调度器根据任务级的调度策略来调度执行。
另外,为ISR增加了一个抽象层。这样,一方面几个硬件中断可以共享相同的中断向量偏移,另一方面对应到一个中断向量偏移的,有一个ISR的集合,而不是一个ISR。当一个硬件中断触发时,为了找到一个与该硬件中断匹配的ISR,每组共享中断偏移的ISR都必须提供一个函数来测试它对应的设备中断标志是否为真。如果函数返回TRUE,该ISR将被激活。Trampoline设计了一种GIH(General Interrupt Handler)函数来完成这种测试工作。
而这样做有两个问题。第一,由于ISR2的后期执行是在任务态运行,这时如果有一个硬件中断触发,就会由GIH来确定一个ISR来执行,从而打断了原来的ISR2。即使后来触发的ISR的优先级比原来ISR2的优先级低,这种情况也能发生。这就造成了一个低优先级的硬件中断抢占了高优先级的中断,而这种情况是不应该发生的,因此是一个很大的问题。第二,根据OSEK操作系统,当ISR运行时,不能进行重新调度。在Trampoline中,ISR2作为高优先级的普通任务进行调度,当一个高优先级ISR2到来时,任务调度器会重新调度一次,从而打断了原来的ISR2的执行。另外,在OSEK操作系统中,重新调度是在任务之间的重新调度;而在Trampoline中,只要有一个ISR2在运行,重新调度只能在有比普通任务更高优先级的ISR2之间进行。当最后运行的ISR2结束时,CPU的重新调度才给了有最高优先级的任务,因此,Trampoline的中断管理部分的实现还有待改进。


3 在Linor/x86上开发TramooIine应用程序
Trampoline目前可以在四种目标平台上使用:带有Keil编译器的Infineon C167、Darwin/PowerPC、FreesealeS12x和POSIX系列操作系统平台。前三种平台的硬件不常见,如果没有就不能运行;而POSIX系列的Linux/x86平台则很容易得到。下面以Linux/x86平台为例,说明开发一个Trampoline应用程序的步骤和方法:
①生成应用程序的OIL配置文件。OSEK/ 0S是一个静态操作系统,系统对象需要在系统生成时定义。OIL是书写这种定义的标准语言。它可以定义所有的应用程序使用的各种对象(任务、中断、警报、计数器、资源、事件等)。OIL配置文件可以手工编写,也可以使用图形化开发配置工具来生成。目前Trampoline没有图形化配置工具,只能手工编写OIL配置文件。
②使用OIL文件解析器GOIL将应用程序的OIL文件转化为一个.c文件和.h文件,其主要功能是进行与应用程序相关的各种系统对象参数的定义、初始化等工作。
③使用GCC工具链将②生成的文件和Trampoline操作系统内核文件及libpcl库文件、VIPER虚拟处理器文件等进行编译和链接,生成一个Linux平台的可执行文件,也就是最终的应用程序可执行文件。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭