事件驱动框架(一)
说明:
- 这篇博是在参考了QP的事件驱动框架后进行总结的内容。(注:该框架主要是一个轻量级嵌入式框架!!)这次整理算是再看一遍吧,之前看不太明白,现在又重新回顾了一下,收获颇多。但是还是可能会有些理解错误请见谅。
- 写这篇博客之前我曾经仿照QP简化了一些策略,写了一种合作式的内核的事件驱动框架来练了下手(没有测试过是否稳定,只是目前能正常运行),然后因为项目需要,就在这个框架上搭建了一个简单的菜单界面的框架(因为屏幕功能有限所以搭的比较简单)。顺便在QP上写了一个自动生成代码的软件。因为属于框架范围,会把代码放出来。因为是第一次用C++写代码,感觉还是用不太好C++的性能。写完之后对语言的理解算又加深了一步吧= =。
- 后面会具体介绍事件驱动框架中的状态机,事件驱动框架,追踪以及一些补充相关。
事件驱动框架的优势
事件驱动框架是一个控制倒置的框架,和传统的嵌入式编程相比,事件驱动的框架会自动选择事件派发调用执行对应程序。就像操作系统里面的进程或线程一样,它会按优先级,或时间轮转片之类的进行自动调度执行,调度的选择是运行时内核自动调节的,开发者没有参与到内核的管理。事件驱动框架的框架作用也很类似,只不过他它是对事件进行自动的选择派发。这和传统的编程开发者在逻辑上人为控制每一个过程要显得更灵活。并且,事件驱动框架的处理往往采用状态机的形式,状态机使用得当可以大大减少传统编程中复杂逻辑的if-else嵌套和各种标志位的识别。
经典的事件驱动的整体框架
下图是事件驱动框架的整体结构:
1.应用。
事件驱动框架上的应用主要是采用主动对象模型进行设计。这样可以把一个项目封装为分为多个对象进行管理,而对象是基于状态机(FSM)的设计,对象间的通信采用的是发送事件的方式进行。这种方式很试用于已存在并调用各种类型的驱动的设计。
2.事件驱动框架。
当状态机运行起来后,各应用间相互发送事件,共享资源之类的,会产生事件同时发送,响应先后的问题等。这时候就需要一个事件驱动的框架对事件进行管理和按需合理分配。这部分会在另写一篇介绍。
3.关于OS
在一些嵌入式系统会加入RTOS,而事件驱动的框架可以设计成可以加在操作系统之上的框架。应用中,通常把每一个对象绑定到一个线程上使用。