曾几何时,我也认为,传统多任务系统一定要优于裸奔(结构化编程)的方式,那时候我是这样想的,因为结构化编程可以说毫无复杂度可言,更像是考验一个人的逻辑分析能力,而引入了系统以后,一切变得就复杂化了,它带来了很多新的挑战,那时候我没有接触到事件驱动型编程,虽然作者现在认为,在现代嵌入式软件领域,传统的多任务还是显得那样的苍白无力,但是也只是因为是在嵌入式软件领域而已。当课题域被放宽以后,它们都有自己的价值所在,即存在及合理。
————程序小白.2021.1.2
课题域不同,其合适的方案也不同。
例如理论上可以用汇编语言写一个os操作系统,但是真的有人会这么干吗?就算是有人真的用汇编写出了一个完整的os,那以后的系统升级也怕是千难万难,但是换一个课题域,汇编也有它的价值所在,例如我们的MCU的启动文件编写。
课题域类型分解:三种类型。
类型一:简单主线型(结构化编程的主战场)。
类型二:复杂主线型(事件驱动编程的主战场)
类型三:多条主线型,主线之间可能存在弱耦合(传统多任务编程主战场)
结构化程序设计(裸奔)的特点:
1.一个偏向于简单型主线控制,例如控制一个开关
2.程序的控制权在应用程序
3.有部分状态机程序设计的理念在其内部,所以有结构化程序设计类型过度到事件驱动型并没有那么难。
进阶课题:如何完成结构化程序设计类型到事件驱动型编程类型的过度?
事件驱动型编程的特点:
1.模型一分为二:应用状态机模型层和控制与服务在QF框架层。
2.多状态机之间的协作的实现由QF控制(合作式或抢占式)。
3.更专注与嵌入式复杂系统的控制(例如多组电机传感器协调控制模拟仿真)。
传统多任务模型的特点:
1.专注于多主线、弱耦合式应用开发。
2.提供更加丰富的组件功能及服务。
作者强调了很多关于传统多任务类型的缺点,其实都是基于现代嵌入式系统开发提出的观点。我认为二者往往不是对立而是相互补充。如何将事件驱动型编程模型作为组件与传统多任务模型共同使用是解决特殊课题的关键。
所有这一切的努力都是为了实现大型系统的小型化,小型系统的模块化,将问题逐步分解划归为特定的范围来解决复杂度的问题。