开篇我们来一起侃侃曾用过的那些程序构架,其实搞单片机软件的真没啥构架可聊的,这是为啥,其实很多老工程师再和同事聊工作的时候也经常会说正在研究程序的构架,其实大部分程序都是顺序构架,那有什么好了解的呢,其实这里用构架不太确切,与其说是构架不如说是代码风格,这个的确是因人而异,五花八门的什么样的都有,例如有一些比较特殊的,N个.h文件对应一个main.c,其实他在把.h当.c用,把变量函数和函数的定义都扔到.h文件中,虽然这么做不符合我们的常规套路,但是并不影响程序的正确性。如下图:
还有那种全代码就一个函数指针,不停地给函数指针赋值,然后调用该函数,这个说实话真的是把函数指针用的出神入化了,这种方式的应用其实应该是中有限状态机理论的毒太深,曾经我也中过,这种代码风格只是我们自己用自己的方式实现一种控制思想 ,没接触过这种风格的代码上来可能会有点蒙圈,当然熟悉代码也需要一定的时间。
好一点的风格就是模块化编程,基本一个.h文件对应一个.c文件,然后提供一个接口文件,这种风格看起来更加的好理解一些,也比较符合常规的套路,如下图:
但是不论上面的哪一种方法其实最初的目的只是想跳出这个笼子。哪怕初心是拼尽全力想要摆脱那种意大利面条式的编程方式,不想用N层if/else嵌套实现状态模式控制,最终还是回到了顺序式编程的框架,问题的根本在于我们靠一己之力,无法完成系统层部分,因为一个好的框架需要管理我们的代码,其核心的实现涉及到数据结构,算法等等一系列吃基础的东西,从零打造一个构架也不是我们的目的,我们的目的只是想要我们的代码跳出这个框框。
下面开始介绍我们的猪脚:基于事件驱动型程序构架,这里我们先举个例子,这个构架都应用在哪些领域,桌面应用程序开发,手机APP开发,Linux驱动应用开发,基本上那些我们或许有点接触的不属于我们这领域的项目,都是基于这种程序构架进行开发。
事件驱动型程序构架的核心:事件,只要举个例子你就理解了,PC机按下键盘、点击鼠标 都会产生一个事件,在我们的单片机中当你加入RTOS以后,最重要的一个东西叫做系统心跳(systemtick),这个在系统中被称为一个系统事件,总结一下,有系统的地方就有事件,总结一下:系统的构架也是采用基于事件驱动型程序构架来设计的,虽然我们在单片机上移植了系统,也可以在应用开发中使用事件进行设计,但是我们的应用程序还不能算是一个具备是驱动型程序构架的软件。
要打造一个事件驱动型构架我们都需要那些组成部分呢(这里也可以称为组件):事件、事件处理器(层次性)、对象(应用程序中的基本要素),系统框架(实现对象机制的必备部分)等等,例如QP提供的构架,如下:
如果大家对事件驱动型编程比较感兴趣,推荐大家可以学一下quantunleaps(量子编程)它提供了一个平台供大家学习,百度输入一下名称官方网站就出来了,后面会基于QP来分享一下核心的内容,和大家一起学习。