状态机编程 (一) 状态机相关概念

状态机编程是一种事件驱动的编程方式,其中事件触发状态转换。监护条件是状态转换的判断依据,事件是状态变化的驱动力。动作与转换定义了状态间的响应行为。RTC表示状态机在完成当前事件处理前不接受新事件,层次式嵌套状态允许事件逐层处理。进入和退出动作提供初始化和清理,内部转换不改变状态,而本地转换只影响子状态。事件延迟则允许在更适合的状态下处理事件。信号粒度应适中,避免处理函数过于复杂或测试频繁。
摘要由CSDN通过智能技术生成

基本概念

状态机编程,又称事件驱动型编程。

事件驱动程序需要一系列的精细粒度的事件处理函数来处理事件。这些事件函数必须处理的很快并返回主事件循环。所以其非常依赖于通过使用静态变量维护在从一个事件驱动函数转换到下一个执行函数时的执行上下文。

大多数事件驱动型系统行为可以被分解为相对小数目的块,在每个单独的块的事件响应实际上取决于当前的事件类型。

行为的快被称为状态,行为的改变对应着状态的改变,称为状态装换。

状态机与流程图的区别在于,当状态机停在某个状态等待一个事件时,是空闲的;而流程图停留在某个节点时,忙于处理操作。

状态机关键字

监护条件

监护条件是基于扩展状态变量和事件参数动态评估的布尔表达式,当监护条件仅在表达式为真时才允许动作转换。

事件

事件是系统中发生的事情,是状态变化的助推剂。但是状态是否发生切换,还需要监护条件进行判断。所以一个状态对一个同样的触发可以有许多转换。状态机根据事件的性质和状态对这个事件的反应进行编码。

动作和转换

当一个事件发生时,状态机执行相应动作进行响应。

从一个状态切换到另一个状态,引发的事件成为触发事件。

运行-到-完成  RTC

RTC表示一个状态机能在它能开始处理下一个事件前完成对每个事件的处理。一个状态机在到达一个稳定的状态配置前不能接收事件。

在RTC模型里,系统在分散的不可分割的RTC步骤里处理事件,新到的事件不能中断当前事件的处理。因为状态机在动作的过程中没有处于一个明确定义的状态。所以状态机需要在一个稳定的状态配置中开始处理每一个事件。

解决方法是在一个状态机忙碌时使用事件队列存储事件。

但是RTC不意味着状态机必须独占CPU直到RTC步骤被完成,在一个多任务处理环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值