基本概念
状态机编程,又称事件驱动型编程。
事件驱动程序需要一系列的精细粒度的事件处理函数来处理事件。这些事件函数必须处理的很快并返回主事件循环。所以其非常依赖于通过使用静态变量维护在从一个事件驱动函数转换到下一个执行函数时的执行上下文。
大多数事件驱动型系统行为可以被分解为相对小数目的块,在每个单独的块的事件响应实际上取决于当前的事件类型。
行为的快被称为状态,行为的改变对应着状态的改变,称为状态装换。
状态机与流程图的区别在于,当状态机停在某个状态等待一个事件时,是空闲的;而流程图停留在某个节点时,忙于处理操作。
状态机关键字
监护条件
监护条件是基于扩展状态变量和事件参数动态评估的布尔表达式,当监护条件仅在表达式为真时才允许动作转换。
事件
事件是系统中发生的事情,是状态变化的助推剂。但是状态是否发生切换,还需要监护条件进行判断。所以一个状态对一个同样的触发可以有许多转换。状态机根据事件的性质和状态对这个事件的反应进行编码。
动作和转换
当一个事件发生时,状态机执行相应动作进行响应。
从一个状态切换到另一个状态,引发的事件成为触发事件。
运行-到-完成 RTC
RTC表示一个状态机能在它能开始处理下一个事件前完成对每个事件的处理。一个状态机在到达一个稳定的状态配置前不能接收事件。
在RTC模型里,系统在分散的不可分割的RTC步骤里处理事件,新到的事件不能中断当前事件的处理。因为状态机在动作的过程中没有处于一个明确定义的状态。所以状态机需要在一个稳定的状态配置中开始处理每一个事件。
解决方法是在一个状态机忙碌时使用事件队列存储事件。
但是RTC不意味着状态机必须独占CPU直到RTC步骤被完成,在一个多任务处理环