【wince】提高系统实时性的几种方…

 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,提高总线访问速度。

  总之,实现一个实时系统,需要从硬件、操作系统、驱动和应用程序等各方面考虑,根据应用的需求选择合适的硬件、操作系统,在软件设计时也需要时刻考虑到实时性的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值