从零开始学习Z-Stack之1-9
- 格式:pdf
- 大小:6.73 MB
- 文档页数:31
Zstack入门教程第一步:安装Zstack从TI官方网站上下载的Zstack为:swrc072c.zip,我想这个压缩包大家都认识。
解压之后为:ZStack-CC2430-1.4.3.exe文件。
这个安装文件大家都会了。
默认安装路径为:C:\Texas Instruments\ZStack-1.4.3。
安装之后在C:\Texas Instruments\ZStack-1.4.3目录下有各PDF 文档为:Getting Started Guide CC2430.pdf,不用多说,这个肯定是要看的。
既然把它放到这么前面,说明它是入门中的入门文档。
下面就简单介绍下这个文档:1、介绍了安装ZStack-CC2430-1.4.3.exe需要的硬件软件条件:需要电脑、操作系统为Windows 2000或Windows XP。
至于更高或更低版本的本人没有尝试。
2、讲了安装流程。
这个有点多余了,这年月哪个有电脑的没有安装上百上千次的软件啊?但是需要强调的是安装路径----默认就好!3、接下来就是让我们看的第一个文档为:Start->Programs->Texas Instruments->ZStack-1.4.3->Z-Stack User’s Guide,既然让我看我就来看看这个文档!!第二步:Z-Stack 用户指导这个文档的更新时间为:2007年12月21日----应该还是比较新的版本。
由于本人英文的却有限,就不翻译了,浏览一遍,把大概意思说下就可以了:1、介绍1.1、适用范围本文档适用于CC2430ZigBee开发板----CC2430ZDK。
2、产品包描述(TI提供的CC2430ZDK工具包)2.1、安装包内容这个就是上面提到的的ZStack-CC2430-1.4.3.exe安装之后的所有内容了。
说白了就是包含Zstack开发所需要的所有软件和文档资料等。
2.2、开发板介绍两块SmartRF04EB 评估版,每个都可以用于CC2430EM评估模块。
第7章无线传感网络操作系统157数处理函数的源代码。
(6)OSAL目录。
Z-Stack的操作系统抽象层(Operating System Abstract Layer,OSAL)目录为 Z-Stack 特有的一层,实现了协议栈运行所依赖的操作系统。
(7)Profile目录。
该目录实现了ZigBee协议APL应用层中的应用程序框架AF子层,为应用程序的运行提供环境,包含 AF 层处理函数的接口文件。
(8)Security目录。
该目录对应 ZigBee 协议的安全服务模块,提供各种安全服务功能。
在Z-Stack中,该模块只是提供了功能的接口,并没有开放源代码。
(9)Services目录。
该目录定义了 IEEE 802.15.4/ZigBee 网络中设备地址的数据类型和设备的地址模式,并提供了相应的处理函数。
实现的功能隶属于 ZigBee 协议标准中的 MAC 层。
(10)Tools目录。
该目录为协议栈的配置文件目录,用于配置协议栈代码运行时的内存布局、ZigBee 网络参数(如信道选择、PANID 选择等)和设备功能。
(11)ZDO目录。
该目录实现了ZigBee协议中APL应用层中的ZigBee设备对象(ZDO)子层的全部功能,为 APL应用层的应用对象提供通用的功能。
(12)ZMAC。
Zmac.c是Z-StackMAC导出层接口文件,zmac_cb.c是ZMAC需要调用的网络层函数。
(13)Zmain目录。
Zmain目录主要包含SoC 的汇编语言启动代码,用来引导 Z-Stack的C语言入口函数。
整个Z-Stack协议栈在这里启动,执行软硬件初始化并启动操作系统。
(14)Output目录。
输出文件目录,该目录由编译器在编译时自动生成,存放编译好的二进制文件和内存映射图。
7.5.3 Z-Stack的工作流程整个Z-Stack的主要工作流程大致分为系统启动、驱动初始化、OSAL初始化和启动、进入任务轮循的主要阶段如图7-16所示。
stack的用法标题:深入理解与应用Stack数据结构**一、引言**Stack,栈,是一种基础且重要的计算机科学数据结构,遵循“后进先出”(Last In First Out, LIFO)原则。
在现实生活中,堆叠的盘子、书本等都可以形象地比喻为栈的运作方式:最后放上去的物品最先被取走。
在编程领域,栈广泛应用于函数调用、表达式求值、括号匹配等诸多场景。
**二、栈的基本操作**1. **Push**: 向栈顶添加元素。
当新元素加入时,它成为新的栈顶元素,原有栈顶元素则下沉一位。
2. **Pop**: 移除并返回栈顶元素。
执行此操作后,原栈顶元素下一个元素将成为新的栈顶元素。
3. **Peek/Top**: 查看但不移除栈顶元素。
通过这个操作,我们可以获取当前栈顶元素的值。
4. **IsEmpty**: 检查栈是否为空。
5. **Size**: 返回栈中元素的数量。
**三、栈的应用实例**- **函数调用栈**:在程序运行过程中,每当调用一个函数时,系统会将该函数的局部变量和返回地址压入调用栈,函数执行完毕后再从栈中弹出,恢复调用前的状态。
- **表达式求值**:计算逆波兰表示法(Reverse Polish Notation, RPN)这样的后缀表达式时,可以借助栈来实现。
遇到数字直接压入栈,遇到运算符则弹出栈顶两个元素进行运算,并将结果压回栈。
- **括号匹配**:在检查字符串中的括号是否正确配对时,可以用一个栈存储左括号,遇到右括号时,若栈顶是对应的左括号,则将其弹出,否则说明括号不匹配。
**四、栈的实现**栈可以通过数组或链表来实现。
数组实现的栈通常具有常数时间的push和pop 操作,但空间大小固定;链表实现的栈可以在需要的时候动态扩展,但每次插入和删除操作的时间复杂度可能较高。
以下是一个基于Python列表实现的简单栈:```pythonclass Stack:def __init__(self):self.stack = []def push(self, item):self.stack.append(item)def pop(self):if not self.is_empty():return self.stack.pop()else:return Nonedef peek(self):if not self.is_empty():return self.stack[-1]else:return Nonedef is_empty(self):return len(self.stack) == 0def size(self):return len(self.stack)```总结来说,栈作为一种线性数据结构,其简单直观的操作规则使其在解决各类问题时具备独特优势。
zstack协议栈知识点总结1. Z-Stack 协议栈架构Z-Stack 协议栈的架构分为四个层次:应用层、安全层、网络层和 MAC 层。
- 应用层:提供应用程序接口,实现应用层协议的处理和应用功能的实现。
- 安全层:实现对数据的加密和认证,确保通信的安全性。
- 网络层:实现 ZIGBEE 网络节点的加入、路由和寻径功能。
- MAC 层:实现对无线通信介质的访问和管理,包括 CSMA/CA 协议、ACK 确认和重传机制等。
2. Z-Stack 协议栈特点Z-Stack 协议栈具有以下几个特点:- 符合 ZigBee 标准:Z-Stack 协议栈严格遵循 ZigBee 标准,保证了与其他 ZigBee 设备的兼容性。
- 易用性:Z-Stack 提供了丰富的开发工具和示例代码,开发者可以快速上手进行开发。
- 灵活性:Z-Stack 支持不同的硬件平台和操作系统,适用于各种嵌入式系统。
- 安全性:Z-Stack 提供了多种安全机制,包括 AES 加密、认证和密钥管理,保证了通信的安全性。
3. Z-Stack 协议栈功能Z-Stack 协议栈实现了 ZigBee 协议的各种功能,包括网络组建、路由管理、数据传输和安全保障等。
- 网络组建:Z-Stack 支持 ZigBee 网络的组建和维护,包括协调器、路由器和终端设备的加入和退出。
- 路由管理:Z-Stack 负责 ZigBee 网络中的路由选择和寻径功能,保证数据的可靠传输。
- 数据传输:Z-Stack 实现了数据的传输和协议控制,包括数据帧封装、数据确认和重传机制。
- 安全保障:Z-Stack 提供了数据的加密、认证和密钥管理功能,保证通信的安全性。
4. Z-Stack 协议栈应用Z-Stack 协议栈广泛应用于物联网、智能家居、工业控制和传感器网络等领域,实现设备之间的无线通信和数据交换。
- 物联网应用:Z-Stack 协议栈可以用于连接各种传感器、执行器和控制器,构建物联网设备之间的通信网。
stack的用法(一)Stack的用法Stack是一个很常见且重要的数据结构,它具有”先进后出”(Last In, First Out,LIFO)的特性。
在计算机科学和编程中,Stack通常用于存储和访问临时数据,比如函数调用、表达式求值和内存分配等。
下面我们来详细讲解一些关于Stack的用法和操作。
1. 初始化一个Stack在许多编程语言中,我们可以使用数组或链表来实现Stack。
以下是在不同编程语言中初始化一个Stack的示例代码:C/C++#include <>#include <>#define MAX_SIZE 100struct Stack {int data[MAX_SIZE];int top;};void initStack(struct Stack* stack) {stack->top = -1;}Javaimport ;Stack<Integer> stack = new Stack<>();Pythonstack = []2. 入栈(Push)操作将一个元素压入Stack中,即执行入栈操作,可以使用以下方法实现:C/C++void push(struct Stack* stack, int item) {if (stack->top == MAX_SIZE - 1) {printf("Stack Overflow\n");return;}stack->data[++stack->top] = item;}Java(item);(item)3. 出栈(Pop)操作从Stack中弹出并返回栈顶元素,即执行出栈操作,可以使用以下方法实现:C/C++int pop(struct Stack* stack) {if (stack->top == -1) {printf("Stack Underflow\n");return -1;}return stack->data[stack->top--];}Javaint item = ();Pythonitem = ()4. 获取栈顶元素(Top)获取Stack中的栈顶元素,而不执行出栈操作,可以使用以下方法实现:int top(struct Stack* stack) {if (stack->top == -1) {printf("Stack is empty\n");return -1;}return stack->data[stack->top];}Javaint top = ();Pythontop = stack[-1]5. 判断Stack是否为空判断Stack是否为空,可以使用以下方法实现:C/C++int isEmpty(struct Stack* stack) {return stack->top == -1;}Javaboolean isEmpty = ();PythonisEmpty = len(stack) == 06. 获取Stack的大小获取Stack中元素的数量,可以使用以下方法实现:C/C++int size(struct Stack* stack) {return stack->top + 1;}Javaint size = ();Pythonsize = len(stack)以上就是一些关于Stack的常见用法和操作,它们在编程中非常有用。
从零开始学习Z-Stack之9接到昨天的继续忽悠,话说:2、SimpleApp“这个例子我基本跑通了,可是鉴于时间的关系,没有来得及打字了,所以就留到下一次了,时间真是如流水啊-------------------快!….”这个例子里面有两个演示:一个是灯与开关的控制实验,一个温度传感器实验。
咱一个个来,不忙。
灯与开关实验在这个例子中灯对应的工程名字为:SimpleControllerDB;开关对应:SimpleSwitchDB。
严重需要注意的地方,这里选用的是DB。
因为从从零开始学习Z-Stack之1上可以看到DB与EB的区别,而这里用DB的硬件就足以应付。
编译下载我就不继续罗嗦了。
咱关心的几个问题不外乎就是表演过程和表演结果,以及初步看看为什么会有这样的结果产生,当然就得从程序上简单了解下。
首先打开Controller(也就是灯设备)的电源,那么LED2就会不停的闪烁,这个时候是设备正在初始化,让您选择设备以哪种类型启动,从程序可以看出:if ( keys & HAL_KEY_SW_1 ){if ( myAppState == APP_INIT ){// In the init state, keys are used to indicate the logical mode.// Key 1 starts device as a coordinatorzb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType ); if ( logicalType != ZG_DEVICETYPE_ENDDEVICE ){logicalType = ZG_DEVICETYPE_COORDINATOR;zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType); }// Do more configuration if necessary and then restart device with auto-start bit set// write endpoint to simple desc...dont pass it in start req..then resetzb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); startOptions = ZCD_STARTOPT_AUTO_START;zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); zb_SystemReset();}如果按下S1(UP),那么作为协调器启动。
堆栈和队列的基本操作一、堆栈(Stack)堆栈是一种具有特殊插入和删除规则的线性数据结构。
它按照“后进先出”(Last-In-First-Out, LIFO)原则管理数据。
1.堆栈的初始化堆栈的初始化即创建一个空堆栈。
2. 入栈(Push)入栈是将数据插入到堆栈顶部的操作。
数据插入后,堆栈的长度加1、插入的数据成为新的堆栈顶部。
3. 出栈(Pop)出栈是将堆栈顶部的数据删除的操作。
删除后,堆栈的长度减1、删除的数据为原堆栈的顶部。
4. 取栈顶元素(Top)取栈顶元素是获取当前堆栈顶部的数据,而不进行删除操作。
5. 判断堆栈是否为空(IsEmpty)判断堆栈是否为空,即判断堆栈的长度是否为0。
6. 获取堆栈长度(GetSize)获取堆栈的长度,即当前堆栈中元素的数量。
堆栈可以使用数组或链表来实现。
数组实现的堆栈称为顺序堆栈,链表实现的堆栈称为链式堆栈。
堆栈的应用:-递归函数的调用和返回-表达式求值-括号匹配-浏览器前进后退功能二、队列(Queue)队列也是一种具有特定插入和删除规则的线性数据结构。
它按照“先进先出”(First-In-First-Out, FIFO)原则管理数据。
1.队列的初始化队列的初始化即创建一个空队列。
2. 入队(Enqueue)入队是将数据插入到队列尾部的操作。
数据插入后,队列的长度加1、插入的数据成为新的队列尾部。
3. 出队(Dequeue)出队是将队列头部的数据删除的操作。
删除后,队列的长度减1、删除的数据为原队列的头部。
4. 获取队首元素(Peek)获取队列头部的数据,而不进行删除操作。
5. 判断队列是否为空(IsEmpty)判断队列是否为空,即判断队列的长度是否为0。
6. 获取队列长度(GetSize)获取队列的长度,即当前队列中元素的数量。
队列也可以使用数组或链表来实现。
数组实现的队列称为顺序队列,链表实现的队列称为链式队列。
还有一种特殊的队列称为优先队列,它根据元素的优先级进行排序。