新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 通过任务分割提高嵌入式系统的实时性

通过任务分割提高嵌入式系统的实时性

作者: 时间:2010-01-15 来源:网络 收藏


图3中,Δt是人手按键的时间,一般为100~300ms。为了能说明问题,这里取100ms。

令 t1'-t1=Δt1,t2'-t2=Δt2

则一次键盘的执行时间

Δt'=t'2-t'1=t2+(t'2-t2)-[t1+(t'1-t1)]=

t2+Δt2-t1-Δt1=

t2-t1+(Δt2+Δt1)=

Δt+(Δt2-Δt1)

由图3可知

Δt1≤tms Δt2≤5ms

实际上,由于两次执行的情况不完全相同,Δt1与Δt2可能会有相当于几个指令周期的时间差异,但也只是μs级的误差。而且,这里是以时间片的形式来计算的,所以依然可以认为

Δt2-Δt1=0

因而有

Δt'=Δt+(Δt2-Δt1)=Δt=100ms(20个时间片)

也就是说,在这20个时钟片内只执行1次键盘,大部分的时间都在空等待。在此期间,中会有20-1=19次其它任务的执行被错过,图3中虚线所示就是在此100ms期间被错过执行的19个任务。显然,这在大多数多任务中都是不允许的。

因此,在这个多任务实时中,键盘任务是个典型的长任务,要使其它19次任务中断都有被应用的机会,必须对该键盘任务进行

4.3 键盘任务的

键盘的方法是将一次键盘任务分成多个小任务,多次任务中断来完成。我们将其放在任务4中(80ms执行1次)。这样有ttask4≤ttask≤2ttask4,即可以保证键盘任务完整可靠地执行,又了CPU的效率。图4是分割后的键盘任务的执行过程。

本文引用地址:https://www.eepw.com.cn/article/152132.htm



从图4可以看出,1次完整的键盘任务是由2~3次任务中断来完成的。情况a中,每一次任务中断发生在ta1时刻,在接下来的一个时间片(5ms)内,检测到有键按下,调用查询值任务;第一次任务中断发生在ta2时刻,在接下来的一个时间片(5ms)内,检测到按键已释放,跳转并执行相应键处理程序。

情况b中,第二次任务中断时(tb2时刻),键还没有松开,因此实际上什么也不做;第三次中断(tb3时刻)才跳到与键值对应的子程序。

这样的分割,每个子任务都可以在5ms 内完成。如果系统中还有大于5ms的长任务的话,可按此法继续进行分割;如果没有的话,系统任务级响应时间一定小于5ms。这样,此系统的大大,由100ms到5ms。本刊网络补充版(http://www.dpj.com.cn)中,介绍了此任务改进后的部分源程序。

结语

任务分割,可以显著地提高多任务系统的。本文改进后的源程序已经在基于MC68HC908GP32的温室控制器中成功地运行过。除此以外,还成功地对LED和SCI任务进行了分割。改进后,除了大大提高外,CPU的执行效率也有显著提高。

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

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭