改进型时间触发嵌入式系统编程模式
由于任务⑧执行一次要几秒钟的时间,整个超级循环执行一次至少大于任务⑧需要的时间,也就是说这个超级循环循环一次要几秒钟时间,将满足不了各任务响应时间的要求。
要解决这个问题,只有把任务⑧拆分成很多个子任务,将每个子任务的耗时压缩到10 ms左右,并定义好各个子任务完成后的状态,在超级大循环中每次根据状态只执行一个子任务,程序结构如下:
while(1){
任务①;
任务②;
……
switch(子任务状态){
case 子任务状态①:
子任务①;
break;
……
case 子任务状态②:
子任务②;
break;
……
case 子任务状态

子任务

break;
}
}
这样,就需要把一个耗时几秒的FFT运算任务拆分成几百个耗时10 ms左有的子任务,这显然是不可接受的。除此之外,超级大循环结构隐含的一个缺点就是随着任务的增加,循环体的执行时间是线性增加的,在实际设计中即使没有像任务⑧那样的高耗时任务,当系统功能增加时要保证系统响应的及时性也是一个不小的挑战。
1.2 使用“时间触发编程模式”进行编程
“时间触发编程模式”的核心是建立一个基丁时间触发的合作式的任务调度器,在系统中尽量减少事件触发(减少中断的使用),系统通过任务调度器完成各任务的调度执行,下面是“时间触发编程模式”的典型程序结构:

评论