电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

论状态机与模块化_谈谈我对理想编程模型的看法VIP专享VIP免费

论状态机与模块化_谈谈我对理想编程模型的看法_第1页
论状态机与模块化_谈谈我对理想编程模型的看法_第2页
论状态机与模块化_谈谈我对理想编程模型的看法_第3页
论状态机与模块化--深圳市新元素邓林生一、状态机与单片机编程状态机在单片机编程中是一个新兴名词,很多老鸟都号称自己编的程序是状态机。那么,状态机到底是什么?网上搜索一下,对它的定义一大把,有我看得懂的,也有我看不懂的,我们这里不深究它的定义,知道怎么用它就行了。简单地说,状态机又称之为有限状态机,状态机系统有N个(有限个)状态,任一时刻,系统都工作于其中的一个状态,当有输入(激励)时,系统执行某些动作,并切换到下一状态。听起来似懂非懂的,但是这跟我们的程序又有神马关系呢?广义地说,任何一个程序都是一个状态机,因为它总是要记住一些状态,然后根据输入进行输出。但是很显然地,我们现在要说的状态机不是指随随便便的一个程序,而是指某一类程序,也就是狭义上的状态机编程。我们知道,我们的单片机程序分成两类:带操作系统的、前后台的。就我们的采集器来说,前后台系统用得比较多,也就是大家常说的裸奔啦。前后台系统从系统构架上来说,可以分成两类:顺序机、状态机。顺序机就是最传统的前后台编程方式,其模型如下:SysInit();//系统初始化。PreStatus1();//前置状态1。PreStatus2();//前置状态2。……//前置状态3—N。While(1){Status1();//状态1。Status2();//状态2。……//状态3—N。}其中,任何一个状态的模型如下:PreHandler1();//前置处理1。PreHandler2();//前置处理2。……//前置处理3—N。While(1){Handler1();//处理1。Handler2();//处理2。……//处理3—N。}好像顺序机里面也很很多状态哦,但是,即使它有再多的状态,它也只能是一个顺序机,而不是状态机。顺序机依靠函数调用的位置来决定状态执行的前后顺序,一个状态执行完,下一个调用的函数就是下一个状态。顺序机的好处是思维简单,按照状态发生的顺序组织程序,现实中怎么过来的,程序中就怎么写,不用想那么多。显而易见,顺序机的坏处是后期不好修改,很难实现并发处理,另外,顺序机很难增加在每一个状态中都要执行的动作(处理)。状态机是另外一种风格的编程方式,状态机程序模型如下:SysInit();//系统初始化。While(1){If(bEvent1)//事件1。{Event1Handler();}If(bEvent2)//事件2。{Event2Handler();}……//事件3—N。}其中,任何一个事件X处理的模型如下:bEventX=0;//标志已处理。Moudler1EventXHandler();//模块1对事件X的处理。Moudler2EventXHandler();//模块2对事件X的处理。……//模块3—N对事件X的处理。很奇怪,状态机编程模型里面竟然没有看到状态两个字。事实上,每个模块对事件处理时,必然会先判断之前的状态,然后进行相应的操作。状态机的状态隐藏在对事件的处理中。看起来,状态机程序与顺序机程序好像是八杆子打不着的两个东西,有什么理由认为顺序机和状态机一定涵盖了所有的前后台程序呢?实事上,它们是有本质差别的。差别在于,状态机不存在区域等待(状态等待),即在while循环的一次执行中,它不会在某个状态内等待某个事件的发生再执行下一状态,即,它只执行一趟,有事件发生就处理,没有事件发生,也不会等待,直接返回。从程序表象上看,就是大循环当中没有小循环。因此,有区域等待的就一定是顺序机,没有域等待的就一定是状态机。在状态机当中,大部分事情都是周期性的定时处理,我们把最小的系统周期称之为系统节拍。一般使用一个定时器产生系统节拍,在一个节拍内,系统最少完成一遍轮询。在低功耗的系统中,一般都是一个节拍执行一遍轮询,然后休眠,等待下一个节拍的到来。在不需要低功耗的系统中,可能一个节拍会执行多遍轮询,但是大部分有意义的事还是在节拍到来的时候执行。系统节拍是整个系统运行的脉搏,从系统响应方面来看,我们当然是希望系统节拍越快越好,这样我们的系统才够劲,响应速度才够快;但是从系统硬件设计以及功耗方面考虑,我们又希望系统能慢一点,这样就可以用更低档的MCU,能使设备待机时间更长。综合多方面考虑,我们总是在需求允许的范围内把系统节拍定得尽量慢一点。大部分情况下,我们推荐系统节拍周期为1ms或者10ms。由于系统在一个节拍内至少要执行一遍轮询,因此,系统节拍周期又称为查询周...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部