
协议是个标准,是约定;
协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用。
商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。
你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理
还有系统里的设备之间的通信顺序什么的
当你的应用需要数据通信时,
调用组网函数给你组建你想要的网络;
当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;
当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。
所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。除非你要做协议研究。
每个厂商的协议栈有区别,也就是函数名称和参数可能有区别
这个要看具体的例子、说明文档
以下答案,仅供参考:
按照本人多年的工作经历,ZigBee产品的形态大体分为四类:ZigBee芯片、嵌入式ZigBee模块、ZigBee设备、ZigBee网关。大体功能如下:
1 ZigBee芯片。这属于ZigBee产品的最上端了,主要由芯片厂商推出,比如TI、Freescale等,主要是面对下游集成厂商,通过外围电路开发,做出成品。当然也会有一些大的厂商直接用ZigBee芯片做产品,节省开支。但是所耗时间较长。
2 嵌入式ZigBee模块。这个是目前市面上流行最广的了,都是通过采用ZigBee芯片做的外围电路开发,功能、尺寸等等,都有很大变化。国内比较知名的厂商有:顺舟科技、赫立讯(目前已倒闭)、南京物联等。主打工业、化工、安防、环境监测等,近前悔两年比较流行的物联网应用,则使ZigBee模块更火,饥唤比如智能家居、智能照明、智慧城市等。
3 ZigBee设备,这个是集成好的ZigBee产品,主要是通过串口(232/485/USB)、网口(NET)进行封装好的产品,客户不需要二次开发,拿来就可以用,比较适合项目类应用。
4 ZigBee网关。这个目前在国内的厂商很少有人在做,包括国外,也很少。通过集成其他无线技术,做到跨无线技术的集成,比如ZigBee & GPRS网关(SZ11-03)、ZigBee & Wi-Fi网关(SZ12-03)就实现了跨网间的数据同步。
回到问题本身,ZigBee的具体应用,更多的是看项目或产品的需求本烂悔凯身,然后选择合适的形态。
以下答案,仅供参考:
按照本人多年的工作经历,ZigBee产品的形态大体分为四类:ZigBee芯片、嵌入式ZigBee模块、ZigBee设备、ZigBee网关。大体功能如下:
1 ZigBee芯片。这属于ZigBee产品的最上端了,主要由芯片厂商推出,比如TI、Freescale等,主要是面对下游集成厂商,通过外围电路开发,做出成品。当然也会有一些大的厂商直接用ZigBee芯片做产品,节省开支。但是所耗时间较长。
2 嵌入式ZigBee模块。这个是目前市面上流行最广的了,都是通过采用ZigBee芯片做的外围电路开发,功能、尺寸等等,都有很大变化。国内比较知名的厂商有:顺舟科技、赫立讯(目前已倒闭)、南京物联等。主打工业、化工、安防、环境监测等,近前悔两年比较流行的物联网应用,则使ZigBee模块更火,饥唤比如智能家居、智能照明、智慧城市等。
3 ZigBee设备,这个是集成好的ZigBee产品,主要是通过串口(232/485/USB)、网口(NET)进行封装好的产品,客户不需要二次开发,拿来就可以用,比较适合项目类应用。
4 ZigBee网关。这个目前在国内的厂商很少有人在做,包括国外,也很少。通过集成其他无线技术,做到跨无线技术的集成,比如ZigBee & GPRS网关(SZ11-03)、ZigBee & Wi-Fi网关(SZ12-03)就实现了跨网间的数据同步。
回到问题本身,ZigBee的具体应用,更多的是看项目或产品的需求本烂悔凯身,然后选择合适的形态。
如果我的回答可以帮到您,请您采纳哦!
如果智能家居网关里面就有ZigBee,那么直接用ZigBee节点和ZigBee协调器通信就行,协议栈已经写好了组网方式,组网过程等等,你需要做的就是调用发送函数发送数据,并且在ZigBee网关那里添加接收处理函数,大致是这样的。
/
实验说明:UART0,波特率115200bps,PC机向CC2430送字符串(以@字符结束),CC2430收到后返回该字符串
/
#include <ioCC2430h>
#define uchar unsigned char
uchar recv_buf[50]={0};
uchar recv_count = 0;
//uchar str[10]="abcdef";
/系统时钟初始化
-------------------------------------------------------/
void xtal_init(void)
{
SLEEP &= ~0x04; //都上电
while(!(SLEEP & 0x40)); //晶体振荡器开启且稳定
CLKCON &= ~0x47; //选择32MHz 晶体振荡器
SLEEP |= 0x04;
}
/UART0通信初始化
-------------------------------------------------------/
void Uart0Init(unsigned char StopBits,unsigned char Parity)
{
PERCFG&= ~0x01; //选择UART0为可选位置一,即RXD接P02,TXD接P03
P0SEL |= 0x0C; //初始化UART0端口,设置P02与P03为外部设备IO口
U0CSR = 0xC0; //设置为UART模式,并使能接收器
U0GCR = 11;
U0BAUD = 216; //设置UART0波特率为115200bps,至于为何是216和11,可查阅CC2430中文手册
U0UCR |= StopBits|Parity; //设置停止位与奇偶校验
}
/UART0发送数据
-------------------------------------------------------/
void Uart0Send(unsigned char data)
{
while(U0CSR&0x01); //等待UART空闲时发送数据
U0DBUF = data;
}
/UART0发送字符串
-------------------------------------------------------/
void Uart0SendString(char s)//字符串首地址赋给了s
{
while(s !='\0') //依次发送字符串s中的每个字符
Uart0Send((s++));
}
/UART0接受数据
-------------------------------------------------------/
unsigned char Uart0Receive(void)
{
unsigned char data;
while(!(U0CSR&0x04)); //查询是否收到数据,否则继续等待
data=U0DBUF; //提取接收到的数据
return data;
}
/主函数
-------------------------------------------------------/
void main(void)
{
char i,b;
//str='a';
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验
Uart0SendString("welcome to wust\n");
// Uart0Send(str[0]);
recv_count = 0;
while(1)
{
while(1)
{
b = Uart0Receive();
if(b=='@')break; //若接收到'@',则跳出循环,输出字符串
recv_buf[recv_count] = b; //若不是'@',则继续向字符数组recv_buf[]添加字符
recv_count++;
}
for(i=0; i<recv_count; i++) //输出字符串
Uart0Send(recv_buf[i]);
Uart0SendString("\n");
recv_count =0; //重置
}
}
(1)OSAL(Operating System Abstraction Layer),即“ *** 作系统抽象层”。
Zigbee协议栈里面的OSAL是基于时间片轮询机制的,也就是说系统以固定的周期不断的查询是否有事件发生,如果有事件发生则判断相应事件的处理任务,由事件对应的处理任务完成事件的处理,完成对事件的整个处理过程。
(2)关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。
协议栈中的OSAL和状态机只是实现事件处理的两种调度方式,其本质都是基于事件驱动的。
(3)关于设计一个协议栈
协议栈即某种协议的代码实现,中间涉及硬件实现以及软件实现两部分。对于初学者首先学会如何使用协议栈才是关键,可以不用考虑协议栈采用哪种调度方式 。
希望我的回答对你有帮助!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)