Z-Stack协议栈是一个基于任务轮询方式的操作系统,说白了就是不断的去查询任务中哪个任务被触发然后进行处理,其任务调度和资源分配由操作系统抽象层OSAL管理着。
你可以理解为:Z-Stack协议栈 = OSAL操作系统 + CC2530硬件模块 + AF无线网络应用
Z-Stack协议栈只做了两件事情:首先进行系统的初始化,然后启动OSAL操作系统。在任务轮询过程中,系统将会不断查询每个任务是否有事件发生,如果有事件发生,就执行相应的事件处理函数,如果没有事件发生,则查询下一个任务。
OSAL操作系统:1、任务调度 2、资源分配
CC2530硬件模块: 定义的IO口、串口、ADC相应的寄存器和功能的实现
AF无线网络应用:发送和接收无线数据
深入理解OSAL的调度机制和工作机理,是灵活应用Z-Satck协议栈进行Zigbee无线应用开发的重要基础。深入的理解OSAL操作系统的关键是要理解
任务初始化函数osalInitTasks()、
任务标识符taskID、
任务事件数组taskEvents[]和任务事件处理函数指针数组tasksArr[]之间的对应关系以及它们在OSAL运行过程中的执行情况。
没错,Z-Stack协议栈就这么的简单!!!
你把下面的这张图看明白了,你就把Z-Stack协议栈的核心搞清楚了!!!
上述示意图可以这样概括,一个任务号对应一个任务初始化函数,用来初始化相应任务的一些配置,同时对应着一个任务处理函数,用来相应任务号的任务被触发后的调研该任务处理函数进行相应任务的处理。而一个任务号对应多个事件来触发,
同一个任务号的事件会同一个任务处理函数处理,只是在任务处理函数中相应的事件ID进行了区别和对应的处理,如下图所示。
其中事件触发主要由osal_msg_send( byte destination_task, byte *msg_ptr ) 和osal_set_event(task_id, event_flag)函数触发。
参考链接:https://blog.csdn.net/ohy3686/article/details/82534996