什么是框架?
程序框架其实就类似一个文件大纲或者模板。因为写程序就类似于写文章,如果没有大纲或者模板那么你写起来就会比较费劲。
为什么要有框架? 节约时间,减少错误。因为对于一种类型的程序它们代码结构体逻辑是一样的,同时有大量相似或者共同的地方。我们可以将这些共同的地方抽出来形成一个固定的程序框架,那么我们再开发新的同一种类型的程序时就可以套用这套框架。
这样会大大提高我们的开发效率,同时由于这个框架是一套公众的大家都在使用的与维护的,使用它会使代码逻辑更不容易出错。
嵌入式系统组成 嵌入式控制系统基本都是由“普通任务”和“中断任务”组成。
• 普通任务:指对时间响应要求不高或者说是那种周期性执行的任务;
• 中断任务:指对时间响应要求高,必须立刻处理的任务;
常见的框架 1、轮询无中断 说明:所有的任务都是按照顺序执行,为了减少整个系统的响应时间有两种方法:
1. 任务中不要使用等待式的延时函数;
2. 任务无法一次执行完的情况下应该将任务分解成若干个小任务每次执行一个小任务循环直到任务完成;上述两种方法都会消耗内存,本来局部变量可以解决的事,现在只能用静态或者全局变量来处理。
优点:程序执行流程简单清晰;
缺点:对于系统修改功能非常不方便,同时如果任务数量增加的话会影响整个系统的响应时间,就会显得系统卡顿;
伪代码实现:
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){ } 5、轮询有中断——虚拟定时器 说明:利用不同的”虚拟定时器“的定时时间来调用不同任务,当定时器的定时时间到时则执行回调函数或者调用任务函数。
这对于一些周期性运行的任务是非常适合的,同时中断可以应对外界的突发事件。这样实时性也可以得到保障,但要注意不要使用等待式延时。一般虚拟定时器的时基为1ms
优点:任务的时间间隔可以相对精确的控制,同时由于中断使用整个系统的实时性也很不错。
缺点:任务的执行时间无法掌控,当定时任务执行时间过长时会影响到虚拟定时器的定时精度。
虚拟定时器实现代码:
https://codeload.github.com/0x1abin/multitimer/zip/master
6、非抢占式实时操作系统 说明:任务之间没有优先级之分,每个任务都是依次执行。但是任务的执行时间是由操作系统严格控制的。即使任务没有执行完,当时间片时间达到时任务便会被挂起。
优点:不用再处心积虑的减少任务中的延时,我们只需要将精力放置在业务逻辑上。
缺点:任务之间是平级的,这就会导致有些任务无法得到紧急处理。
伪代码实现:
https://blog.csdn.net/twx11213030422/article/details/104637273
7、抢占式实时操作系统 说明:每个任务之间是一个“死循环”同时任务都有一个优先级。高优先级的任务可以打断低优先级的任务,这个就类似于中断一样。所以整个系统的实时性就非常好,同时每个任务都还受时间片的控制也就是说它们的执行时间是可以预测的。它也支持中断可以响应紧急的事件。
优点:实时响应,工程师只需要将精力放置在业务逻辑的实现上
缺点:需要移植且对单片机硬件资源有一定要求。
常用的抢占式实时操作系统:keil rtx、freertos、ucosii/iii等等。
数据存储量爆发,浪潮推出更高密度存储服务器SA5456M5
Charles River Analytics正式推出了Virtuoso软件开发工具包VSDK
从微信看张小龙的产品之道“关注用户”
智能翻译机哪家强?讯飞双屏翻译机,跨语言沟通的神助手
GPC53D | 智能手机传感器中的“神助攻”
手把手教你单片机程序框架 几种常见的单片机编程框架解析
PoE供电系统中的功率损耗问题
同个变压器是否能够同时升压和降压呢?
想学编程应该先学什么_初学编程应该看什么书
数字化转型对网络存在什么影响
骨神经肌肉植入物手术成功 患者能够灵活控制假体
小型伺服电机可以用在什么地方?
HTC VIVE™与乐客VR达成战略合作 VIVEPORT™ARCADE内容率先上线VRLe平台
应用在温度报警器领域的数字温度传感芯片
光纤/光栅解调器
安捷伦发表新X系列信号产生器增强选项,支援更快、更有效的验证
网络安全系统大揭秘:美国FBI如何监控用户数据?
用边缘人工智能解决灭绝危机
恩智浦半导体NXP推出新一代低VF肖特基整流器
基于超导单光子探测器的红外光学系统噪声分析和优化