官方文档:Application Event Manager
Zephyr是wind-river的项目发展过来的,并且声称是“微内核”的,微内核意味着各种app、kernel的服务、driver都尽量是解耦合,最好是以独立task或者thread方式运行的。
从NCS(nRF Conenct SDK)文档里看,提倡的也是这个架构,就是使用一个Application Event Manager来完成Event的转发,这与ROS、NuttX、QNX等系统的工作方式类似。
每一个功能(可以是硬件驱动比如UART、也可以是上层应用shell)可以独立为一个module,他们之间的协同,是通过“定义Event、提交Event;订阅Event、处理Event”来完成的。中间协调的是这个幕后英雄Application Event Manager。从而达到Nordic说的Modular Design目的,甚至NCS还定义了Common Application Framework来强制规范。
具体代码编写,主要使用以下几个宏完成:
APP_EVENT_INFO_DEFINE : 定义EVENT的Profiler信息,调试用的
APP_EVENT_TYPE_DEFINE:定义EVENT
APP_EVENT_SUBMIT:提交或者说产生EVENT