状态模式:提醒器与延迟事件模式解析
1. 提醒器状态模式
提醒器事件可通过调用QF实时框架提供的 QActive_postFIFO() 函数来触发。提醒器事件会使状态从“空闲”转变为“忙碌”。在“忙碌”状态下,会覆盖 TIMEOUT_SIG 信号,经过几次超时事件后,状态又会转变回“空闲”,如此循环往复。
1.1 提醒器状态模式的影响
尽管提醒器状态模式在概念上非常简单,但它具有深远的影响。它能解决比示例中更多的问题,可以被视为解决状态机拓扑中几乎任何问题的“万能工具”。
- 消除完成转换 :可以应用提醒器模式来消除麻烦的完成转换。在UML规范中,完成转换是没有显式触发器的转换(它们由完成事件隐式触发,也称为匿名事件)。而QEP事件处理器要求所有转换都有显式触发器,因此不支持完成转换。不过,提醒器模式提供了一种解决方法,即可以为每个转换发明一个显式触发器并将其发送给自己,这样能更好地控制行为,因为可以明确指定完成条件。
- 拆分长RTC步骤 :长RTC步骤会加剧状态机的响应问题,并给事件队列带来更大压力。提醒器模式可以帮助将CPU密集型处理(如迭代)拆分成更短的步骤。就像在电脑显示器上贴便签提醒自己在被打断时任务的进度一样,可以发明一个继续处理的刺激因素,并发明事件参数来传达上下文,以便下一步能从上一步结束的地方继续。这样做的好处是其他(可能更紧急)的事件可以“插队”,使状态机能够更及时地处理它们。
1.2 事件发布策略
在实现事件发布时,有两种基本选择:先进先出(FIFO)或后
超级会员免费看
订阅专栏 解锁全文

52

被折叠的 条评论
为什么被折叠?



