OSAL任务、事件和消息之间关系.md

事件与消息的区别

在osal中
事件是驱动任务去执行某些操作的条件,当系统中产生一个事件,OSAL将这个事件传递给相应任务后,任务才能执行一个相应的操作(传递这个行为是通过调用轮训函数实现,完成操作时通过时间处理函数实现)。

事件常伴随一些信息,比如按键按下事件后,携带着是几号按键按下,所以将事件和数据封装成一个消息,然后在事件处理函数中使用osal_msg_receive()函数接收小,并做相应的消息判断,比如:AF_INCOMING_MSG_CMD消息,然后调用相应的消息处理函数。

OSAL维护了一个消息队列,每隔消息都会放到消息队列中去,当任务接收到事件后,从消息队列中获取属于自己的消息,然后调用相应的消息处理函数。

任务、事件和消息之间关系

Zstack是zigebee协议的一个实现,为更好管理,加入了OSAL(操作系统抽象层)
在OSAL中,有任务、事件、消息三个概念。
他们关系如下:

  1. 任务是处理事件的一个功能集合,一般有一个事件处理函数实现(ProcessEvents)
  2. 事件是当前系统中被触发的动作,比如:按键按下、网络状态发生改变、串口收到消息等等
  3. 消息则是事件及事件所携带消息的集合。发生事件是,OSAL会将时间和其消息打包到消息队列,供事件处理函数来处理。

具体流程为:
事件发生 -> 被打包为消息 -> 存放到消息队列 -> OSAL轮训任务中的事件状态 -> 有事件发生 -> 事件处理函数执行对应功能

你可能感兴趣的:(ZigBee)