前后台系统
前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台,
main()函数中的无限循环称为后台。
伪代码:
int flag1 = 0;
int flag2= 0;
int flag3 = 0;
int main(){
hardwareInit();//硬件初始化
for(;;){
if(flag1){
doSomething1();//处理事件
flag1=0;//清除标志位
}
if(flag2){
doSomething2();//处理事件
flag2=0;//清除标志位
}
if(flag3){
doSomething3();//处理事件
flag3=0;//清除标志位
}
}
}
//中断处理程序
void ISR1(void ){
flag1=1//置位标志位
}
//中断处理程序
void ISR2(void ){
flag2=1//置位标志位
}
//中断处理程序
void ISR3(void ){
flag3=1//置位标志位
}
在顺序执行后台程序时,如果有中断,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序中标记事件。如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回后台程序处理。虽然事件的响应和处理分开了,但是事件的处理还是在后台顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大提高程序的实时响应能力。在大多数中小型项目中,前后台系统运用得好,堪称有操作系统的效果。