Z-Stack 协议栈的简单总结 Z-Stack 协议栈是通过 UCOS 实现的,协议的各个层被分配一个任务,共有 Hal、mac、nwk、MT、APS、ZDApp 和 SampleApp 七个任务。下面对每个任务进行详细介绍: 1. Hal 任务:负责 Zigbee 协议的硬件抽象层,提供了对硬件的访问接口。 2. mac 任务:负责 Zigbee 协议的媒体访问控制层,处理数据的发送和接收。 3. nwk 任务:负责 Zigbee 协议的网络层,处理数据的路由和转发。 4. MT 任务:负责 Zigbee 协议栈与上位机软件的通信,通过串口来完成串口指令的收发机解析,并经由操作系统对这些消息进行处理。 5. APS 任务:负责 Zigbee 协议的应用支持层,提供了应用层的服务。 6. ZDApp 任务:负责 Zigbee 设备的应用层处理函数,可以通过这层的函数来与网络层和 APS 层进行通信,如完成组网、加入网络、端点匹配、绑定等。 7. SampleApp 任务:用户完成的部分,主要在这里完成自己的编程设置。 在 OS 中,每个任务都有一个任务初始化函数和任务事件处理回调函数,如 SampleApp_Init(taskID) 和 SampleApp_ProcessEvent(byte task_id, UINT16 events)。如果需要深入了解任务的工作机制,如任务管理、调度任务的同步与通信等,可以去看 uC/OS 得相关资料。 在 OS 中,事件是为了实现任务间的同步与通信的,如信号量、消息邮箱和消息队列。单片机基础对于 OS 不胜了解的可以这样来理解,自己当初也是这样来理解的(可以把任务中的发送事件理解为置标志位,在本任务或另一个任务中查询标志位来完成相应操作)。 在实际应用中很多时候做得也是这个工作,例如在 SampleApp_ProcessEvent 中来完成事件的功能,刚开始可以把各个事件按照 C 中的 SWITCH CASE 来理解,或者状态机的状态切换的理解(实际上应该据自己浅薄的理解,OS 中任务及事件的跳转就如同状态机完成各个状态间的切换,只是每个任务都有个优先级和任务的执行时间,uC/OS 中的任务正是基于优先级的调度)。 在实际应用中要很好的利用好 osal_start_timerEx(TaskID, SEND_MSG_EVT, MSG_TIMEOUT)、osal_stop_timerEx(task_id, event_id) 和 osal_set_event(task_id, event_flag) 等函数来实现任务的同步与通信。 在 ZStack 中协调器和路由节点是由主电源来供电的得一直工作,而终端节点采集数据并睡眠。但是在实际应用中有时候路由节点也不方便用主电源供电的,而且对于采集数据不太频繁的网络,靠近终端的路由节点也没必要一直处于工作状态。基于上述思想,因而我想让部分路由节点也睡眠,前提是整个网络能够保持时间同步。由于在 ZStack 中不支持路由睡眠,需要自己写相应的睡眠函数。我也是模仿其中的halsleep 写得,但是在实际调试过程中,一进睡眠模式,程序就跑飞,逐个屏蔽发现也是PCON | = 0X10(启动睡眠)这语句导致的,相当于还是不能进睡眠。在协议栈外面单独调试,通过外部中断唤醒,能够正常工作电流也基本符合要求。在 msstatePAN 协议栈中也做了类似的处理,预期的目标已达到。
- Hywfred2014-04-17真的是简单总结,好简单~~
- 粉丝: 2
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 人工智能开发项目深度学习项目源码带指导视频DCGAN人脸图片生成
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)证券业务管理系统设计与开发
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)银行储蓄业务管理系统2
- Rust编写的一个todo程序源代码解读
- 小程序源码2-备忘录模板
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)银行储蓄业务管理系统
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)医院管理系统设计与开发
- VMware 学习教程(入门到实践)
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)学生选课管理系统2
- LLMS&隐写术12345