多任务系统

多任务系统的事件响应是在中断中完成的,但事件的处理是在任务中完成的。

在多任务系统中,任务与中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急事件在中断中被标记之后,如果事件对应的任务的优先级足够高,就会立刻得到响应。

相比前后台系统,多任务系统的实时性又被提高了。

 

int flag1 = 0;

int flag2 = 0;

int flag3 = 0;

 

int main()

{

  HardwareInit();//硬件初始化

  RTOSInit();//RTOS初始化

  RTOSStart();//RTOS启动,多任务调度,不再返回

}

 

void ISR1(void){

  flag1 = 1;//置标志位

}

 

void ISR2void){

  flag1 = 2;//置标志位

}

 

void ISR3(void){

  flag1 = 3;//置标志位

}

 

void TaskThread1(void){

  while(1){//无限循环,不能返回

    if(flag1){//任务实体

      ... .....//处理事件

      flag1=0;

    }  

    waitDelay();//阻塞等待

  }

}

 

void TaskThread2(void){

  while(1){//无限循环,不能返回

    if(flag2){//任务实体

      ... .....//处理事件

      flag2=0;

    }  

    waitDelay();//阻塞等待

  }

}

 

void TaskThread3(void){

  while(1){//无限循环,不能返回

    if(flag3){//任务实体

      ... .....//处理事件

      flag3=0;

    }  

    waitDelay();//阻塞等待

  }

}

 在多任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的、无限循环且不能返回的小程序,这个小程序我们称之为任务。

每个任务都是独立的、互不干扰的,且具备自身的优先级,它由操作系统调度管理。

加入操作系统后,我们在编程时不需要精心地设计程序的执行流,不用担心每个功能模块之间是否存在干扰,编程反而变得简单了。

 

无论是裸机系统中的轮询系统、前后台系统还是多任务系统,我们不能简单地说孰优孰劣,它们是不同时代的产物,在各自的领域都还有相当大的应用价值,只有合适的才是最好的。

 

posted @ 2022-03-04 19:57  Ben002  阅读(141)  评论(0编辑  收藏  举报