多任务系统
多任务系统的事件响应是在中断中完成的,但事件的处理是在任务中完成的。
在多任务系统中,任务与中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急事件在中断中被标记之后,如果事件对应的任务的优先级足够高,就会立刻得到响应。
相比前后台系统,多任务系统的实时性又被提高了。
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();//阻塞等待
}
}
在多任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的、无限循环且不能返回的小程序,这个小程序我们称之为任务。
每个任务都是独立的、互不干扰的,且具备自身的优先级,它由操作系统调度管理。
加入操作系统后,我们在编程时不需要精心地设计程序的执行流,不用担心每个功能模块之间是否存在干扰,编程反而变得简单了。
无论是裸机系统中的轮询系统、前后台系统还是多任务系统,我们不能简单地说孰优孰劣,它们是不同时代的产物,在各自的领域都还有相当大的应用价值,只有合适的才是最好的。