P31
疑问
事件驱动
1.事件的变化主动去通知(回调)应用的变更;
2.POLLING用法是 应用定时地查询事件是否发生变化;
事件和消息的区别?
对事件进行加工,把它们变成标准统一的数据格式提交程序(状态机化了的程序)处理。 把事件变成消息,用消息驱动单片机程序就是这种思想
- 消息就是一段存储着特定数据的内存 块,数据的存储格式是设计者预先约定好的,只要按照约定的格式读取这段内存,就能获得消
息所承载的有用信息。
为了不至于丢失事件,我们可以先在事件相关的 ISR 中把事件加工成消息并把它存储在消 息缓冲区里,ISR
做完这些后立即退出。主程序忙完了别的事情之后,去查看消息缓冲区,把 刚才 ISR
存储的消息读出来,分析出事件的有关信息,再转去执行相应的响应代码,最终完成
对本次事件的响应。只要整个过程的时间延迟在系统功能容许的范围之内,这样处理就没有问 题。 将事件转化为消息,体现了以空间换时间的思想。
我的理解:
事件:定性
消息:定量
事件驱动和观察者模式的区别?
一个输入更新,观察者模式可通过链表的形式直接通知到观察者
动作的理解,动作是在转换是执行的;那进入和退出?
动作:在状态机的迁移过程中,状态机会做出一些其它的行为,这些行为就是动作,动作 是状态机对事件的响应。
带箭头的直线或弧线代表状态迁移,起于初态,止于次态。
图中的文字内容是对迁移的说明,格式是:事件[条件]/动作列表(后两项可选)。
“事件[条件]/动作列表”要说明的意思是:如果在某个状态下发生了“事件”,并且状态机
满足“[条件]”,那么就要执行此次状态转移,同时要产生一系列“动作”,以响应事件。在这 个例子里,我用“KEY”表示击键事件。
状态机的逻辑完备性
状态机就能解决逻辑完备性的问题。
状态机是一种以系统状态为中心,以事件为变量的设计方法,它专注于各个状态的特点以
及状态之间相互转换的关系。状态的转换恰恰是事件引起的,那么在研究某个具体状态的时候,
我们自然而然地会考虑任何一个事件对这个状态有什么样的影响。这样,每一个状态中发生的
每一个事件都会在我们的考虑之中,