总结

模型事件响应事件处理特点
轮询系统主程序主程序轮询响应事件,轮询处理事件
前后台系统中断主程序实时响应事件,轮询处理事件
多任务系统中断任务实时响应事件,实时处理事件

1.轮询系统

结构简单,只适用于顺序执行代码不需要外部事件驱动的情况

int main(void)
{
    HardWareInit();
    
    for(;;){
        DoSomething1();
        
        DoSomething2();
        
        DoSomething3();
    }
}

2.前后台系统

中断(前台):外部事件响应,处理简短事件
事件处理(后台/main函数中的无限loop):轮询系统执行,处理复杂时间

分离了事件的响应和处理

int flag1 = 0;
int flag2 = 0;

int main(void)
{
    HareWareInit();
    
    for(;;){
        if(flag1){
            DoSomething1();
        }
        if(flag2){
            DoSomething2();
        }
   }
}

void ISR1(void)
{
    flag1 = 1;
    
    DoSomething1();
}

void ISR2(void)
{
    flag2 = 1;
    
    DoSomething2();
}

3多任务系统

中断:事件的响应
任务(也存在优先级):事件的处理

任务是把程序主体分割成的独立的、无限循环且不能返回的小程序,由操作系统进行调度

int flag1 = 0;
int flag2 = 0;

int main(void)
{
    HardWareInit();
    
    RTOSInit();
    
    RTOSStart();    
}

void ISR1(void)
{
    flag1 = 1;
}

void ISR2(void)
{
    flag2 = 1;
}

void DoSomething1(void)
{
    for(;;){
        if(flag1){
        
            }
        }
}

void DoSomething2(void)
{
    for(;;){
        if(flag2){
        
            }
        }
}

荻叶添愁
1 声望1 粉丝