1.初始化函数
首先调用的函数用来初始化和启动系统,当设备上电时,程序从AppColdStart开始,这里系统完成初始化。用户程序可能调用其他的初始化函数,比如初始化用户变量和系统片上外设比如定时器、UART等。另外,必要的zigbee系统参数,比如无线信道必须在这里配置。最后,BOS已经初始化和启动,调用启动BOS的函数不会返回,BOS开始控制系统。
BOS在调用函数JZA_vAppDefineTasks之前开始执行一些内部函数。JZA_vAppDefineTasks是用户程序可以在BOS中注册的函数(除了默认的用户任务),尽管如此在大多数情况下BOS用户任务不是必须的。然后由BOS控制系统。
执行完一些内部函数,BOS将控制权交给用户程序中最后的初始化函数:JZA_boAppStart,在这个函数中,可以为节点端点放置调用AF为端点注册任何ZIGBEE描述符,一旦这个步骤完成,必须在函数退出和返回控制权给BOS之前调用函数启动zigbee协议栈的函数。
2 主要的 Application 函数
一旦BOS和Zigbee协议栈启动,BOS将控制权通过一些函数交给用户程序,其中一个函数就由BOS调用,其他的函数是由事件驱动的,只有在相关的事件发生时才会被调用。当用户代码结束的时候,控制权又返回给BOS。BOS将周期性传递控制权给zigbee协议栈以完成必要的动作。
用户应用程序必须是非自锁的,它必须不能等待一个不停判决的条件,或者执行等待条件发生的空循环,因为周期性地将控制权交给BOS和zigbee协议栈以便正常工作是非常重要的。
主要的应用函数如下:
JZA_vAppEventHandler
由BOS在一定的时间间隔调用,任何需要周期性运行的用户应用程序可以放在其中。
JZA_vStackEvent
处理从下层协议栈来的各种事件,比如APS层的数据传输确认。
JZA_vPeripheralEvent
当硬件中断发生时被调用,比如Timer 或者DIO 线上的中断。从中断的上下文调用,可以将处理中断的应用函数代码置于其中。
JZA_bAfKvpObject
当KVP命令帧从其他设备接收时调用,可以将处理输入的命令和产生响应的用户程序放在该函数中。
JZA_bAfMsgObject
当MSG帧从其他设备接收时调用,可以将处理输入消息的应用程序放入该函数中。
JZA_vAfKvpResponse
当有输入的KVP 响应帧从其他节点接收时调用,可能是一个更早的命令帧的确认,或者请求数据的响应。可以将接收和处理响应帧的用户程序置于该函数中。
JZA_vZdpResponse
当一个响应从ZDP接收时调用该函数,比如一个绑定请求的响应,可以将处理相关响应的用户程序置于该函数中。
为了产生调用zigbee协议栈,发送KVP或MSG命令帧到其他的节点,或产生ZDP服务的请求(比如绑定),必要的函数调用必须在用户程序中包含。