MS Windows CE的实时系统
检查返回的中断ID号,并设置相关事件,中断服务线程等待事件。当内核设置事件时,IST停止等待并开始执行,附加的中断进程,中断处理大部分实际上出现在IST中,两个最高的线程优先权(级别0和1),通常指定为ISTS,保证这些线程运行得足够快。
正如前面所说,处在最高级的ISTS不能被其它的线程占用,这些线程持续执行直到它们截止或放弃。
WindowsCE不能支持群体中断,这就意味着当以前一个中断处理中,另一个不同接受服务,也就是当内核位于ISR时如果中断出现,在为新的IRQ开始ISR前它将一直执行直到ISR结束,这将引起硬件中断和ISR开始之间的延迟,拖延和响应时间中断响应。
中断响应
本论文中,IntervuptLatency词组主要指的是较件中断,处理响应,也即是从处部中断到达处理器到中断开始处理间的时间。
WindowsCE中断响应时间是针对锁存在内存上的线程(当内存响应不存在时)。这使得计算最差事件响应成为可能——中断服务程序(ISR)开始和中断服务线程(IST)开始D的总时间,直到中断处理的总时间能够通ISR和IST中所需时间计算决定。
ISR响应通用公式定义如下:
ISR开始时间=value1+dISR_Current+sum(dISR_Higher)
value1=由内核处理过程获得响应值
dISR_Current=中断到达时程序中ISR持续时间。这个值范围由0到系统中最长的ISR持续时间
sum(dISR_Higher)=所有在ISR开始前的较高级ISRS持续时间总和,即在时间vahe1+dISR-cumeneu间到达的中断
例如,考虑一个拥有关键优先权ISR的嵌入式系统,因为ISR被设成最高级,这有样ISRSdISR-Higher值为0。当没有其它ISRS最低响应,在程序中,即为value1最低响应即为value1加系统中最长ISR周期,当中断到达时,正是系统中最长的ISR开始执行。
IST响应周期定义如下:
IST开始时间=value2+sum(dIST)+sum(dISR)
value2=由内核处理的响应值
sum(dIST)=所有的出现在ISR和IST,开始的优先级ISTS和线程上下文转换时间总和。
sum(dISR)=在中断(?)ISR和它的IST之间运行的其它ISRS持续时间总和。
最简单的例子——具有一个关键级ISR和一个关键级线程(无其它0优先级的线程)的嵌入式系统——没有其它的ISTS能够在ISR和IST之间中断,然而在关键级的ISR和它相关的IST开始间其它的ISRS能被处理。
因为ISRS一旦能够获得,即可被处理,很容易想象成病态情况,涉及产生一个持续的ISRS流,从而产生不确定的推迟。IST的开始不可能出现,因为OEM对系统中的中断完成控制。因为OEM(原始设备制造商)为特定操作系统设计传统WindowsCE版本。OCM利用目标操作环境限制使系统设计最佳化。
为减少响应时间,OEM控制ISR和IST处理时间中断优先级线程优先级。公式中的value1和walue2代表,WindowsCE内核中处理时间,这是OEM不能控制的目前的在分时,研究工作涉及这些确认值。
确保WindowsCE的实时操作
两种不同途径被用来确保WindowsCE操作:
由WindowsCE开发组进行内部的检查或分析内核代码,
OEM和ISV(独立软件销售商)利用一些将在未来的WindowsCE版本嵌入式工具包(forVCFT)提供工具来确保特定配置。
WindowsCE关于VC++的嵌入工具包包括以下工具:
(一个对于分时研究的内核的工具版本和Intrtinrt.ext应用软件来观察,中断过程的最大、最小、平均时间。
微软也能开发其它的针对顾客需要的分时工具。
WindowsCE开发组,已经检查了内核代码以证实它能由最差的情况时间表征,它是独立于系统对象数目的。
为了利用这个检查,内核被表征成一套KCALLS或系统调用,在内核关闭优先权是它们是内核程序,并且不允许其它的线程运行,最差事件时间,此时,实时进程、标止运行,它能在内核中表征成最差事件KCALL时间(注意:这些时间不影响ISRS,只影响线程,例如ISTS)。
开发组通过检查发现这没有非持久的循环在KCALLS,这意味着:并所有的KCALLS能够表示成单向分支,代码路径,并确保通过KCALL并独立于输入参数发现最差事件时间成为可能。
查找实际的最差事件时间包括使用Instrumentedkemal,这仅是一个内核版本,它在设定应用环境后编辑使用,KCALL_PROFICE=1,以保证额外的分时功能,这个instrumentedkemel与debugkemel不同,Instrumentted是为一个零售的内核使用,它用来获得分时值,这常对于装运产品常常讳之莫深,在retailkernal和instrumentedkernel唯一区别是它的装备。
Instrumenttedkernel记录所有的KCALL时间,这些值,包括最孝最大和平均时间,并能够通过调用专用的API函数DumPkcallprofile打印到调试接口,Instrumentedkernel通常运行在强状态下,然后调用Dumpkcallpref
- Linux嵌入式系统开发平台选型探讨(11-09)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- linux文件系统基础(02-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)