什么是框架? 程序框架其实就类似一个文件大纲或者模板。因为写程序就和类似于写文章,如果没有大纲或者模板那么你写起来就会比较费劲。而。 为什么要有框架?节约时间,减少错误。因为对于一种类型的程序它们代码结构体逻辑是一样的,同时有大量相似或者共同的地方。我们可以将这些共同的地方抽出来形成一个固定的程序框架,那么我们再开发新的同一种类型的程序时就可以套用这套框架。 这样会大大提高我们的开发效率,同时由于这个框架是一套公众的大家都在使用的与维护的,使用它会使代码逻辑更不容易出错。 嵌入式系统组成嵌入式控制系统基本都是由“普通任务”和“中断任务”组成。 常见的框架1、轮询无中断说明:所有的任务都是按照顺序执行,为了减少整个系统的响应时间有两种方法:
优点:程序执行流程简单清晰; 缺点:对于系统修改功能非常不方便,同时如果任务数量增加的话会影响整个系统的响应时间,就会显得系统卡顿; 伪代码实现: int main(void){ while(1) { doSomething_1(); //任务1 doSomething_2(); //任务2 doSomething_3(); //任务3 /*其他各种任务*/ } return 0;}2、只有中断说明:在“只有中断“的系统中,主函数main的循环中是不做任何操作的。 优点:可以实时响应异常的任务(事件) 缺点:中断资源有限,当任务过多时会响应不及时。 伪代码实现: int main(void){ while(1) { ; }} /*中断服务函数1*/void ISR1_IRQHandler(void){ doSomething_1();} /*中断服务函数2*/void ISR2_IRQHandler(void){ doSomething_2();}3、只有中断框架的变种说明:采用状态机的机制来执行任务。中断函数中设置状态机的状态,而main函数主循环中根据不同的状态值执行不同的任务。这个其实不属于真正只有中断的形式。 int main(void){ while(1) { if(flag_1) { doSomething_1(); } if(flag_2) { doSomething_2(); } if(flag_3) { doSomething_3(); } /*其他各种任务*/ } return 0;} /*********中断服务函数1************/void ISR1_IRQHandler(void){ flag_1 = ~flag_1;} /*********中断服务函数2************/void ISR2_IRQHandler(void){ flag_2 = ~flag_2;} /*********中断服务函数3************/void ISR3_IRQHandler(void){ flag_3 = ~flag_3;}4、轮询有中断说明:将一些周期性的任务放置在main函数中的主循环中执行,
优点:合理的利用资源,将常规任务与紧急任务分开来了。 缺点:程序结构与逻辑比较复杂,在任务分配以及协作之间需要花费很大精力。 伪代码实现: int main(void){ while(1) { if(flag_1) { doSomething_1(); } if(flag_2) { doSomething_2(); } if(flag_3) { doSomething_3(); } /*其他各种任务*/ } return 0;} /*********定时器中断服务函数************/void ISR1_IRQHandler(void){ }
|