前后台系统

前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台,

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//置位标志位

 

在顺序执行后台程序时,如果有中断,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序中标记事件。如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回后台程序处理。虽然事件的响应和处理分开了,但是事件的处理还是在后台顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大提高程序的实时响应能力。在大多数中小型项目中,前后台系统运用得好,堪称有操作系统的效果。

 

posted @ 2022-03-04 08:48  Ben002  阅读(442)  评论(0编辑  收藏  举报