Microchip Zigbee Stack库的任务处理机制通过服务原语(Primitive)驱动。执行函数为ZigbeeTasks()。
在main()函数中的while(1)循环中,调用ZigBeeTasks( ¤tPrimitive )来处理各种任务。currentPrimitive用来在任务之间传递服务原语。
从物理层到应用层的服务原语在ZigbeeTasks.h中定义:ZIGBEE_PRIMITIVE;
从物理层到应用层的各层消息结构也在ZigbeeTask.h的PARAMS结构体中定义。该结构有一个全局变量params,被许多的c文件使用。一般地,每条服务原语对应一个消息结构。
ZigBeeTasks()的实现流程:
循环处理:
如果当前的服务原语是“没事”(NO_PRIMITIVE),则依次调用PHYTasks()、MACTasks()、NWKTasks()、APSTasks()、ZDOTasks()各层的任务处理函数。如果某一层返回“有事”,则根据返回的服务原语所属的层调用该层的任务处理函数。
直到:
(1)服务原语属于应用层,应当交给用户的代码来处理;或者
(2)服务原语为NO_PRIMITIVE;
才返回。
以Zigbee节点转发数据分组为例。MCPS_DATA_indication是对应的服务原语,PARAMS.MCPS_DATA_indication是对应的消息结构。
Zigbee节点从RF收到数据分组,由MACTasks()产生MCPS_DATA_indication原语。
在NWKTasks()的CASE MCPS_DATA_indication处理中(这时分组及相关参数保存在PARAMS.MCPS_DATA_indication中),根据目标地址决定转发地址(调用GetRoutingAddress()方法返回ROUTE_SEND_TO_MAC_ADDRESS),然后返回MCPS_DATA_request原语。
MCPS_DATA_request是MAC层的原语,由MACTasks()执行发送分组的工作。
文章评论(0条评论)
登录后参与讨论