(通信 电子)ZigBee学习资料(4)

2019-04-22 16:48

打开Cyril3AppCoordManage.c源文件?添加如下代码:

byte Cyril3AppCoordManage_TaskID; void Cyril3AppCoordManage_Init( byte task_id ) {

Cyril3AppCoordManage_TaskID = task_id; }

UINT16 Cyril3AppCoordManage_ProcessEvent( byte task_id, UINT16 events ) {

return 0; }

在任务初始化函数中?我们仅仅将分配给任务的ID保存下来。在事件处理函数中?我们先什么也不

干。简单的返回0代表所有的事件已经处理完毕。不过即使这样?谁也不能否认它是一个有效的事件处理

函数。接着?我们在tasksArr数组里面加入Cyril3AppCoordManage_ProcessEvent这个事件处理函

数?然后在osalInitTasks函数中调用任务的初始化函数。需要注意的是?tasksArr数组里面各任务事件

处理程序的排列顺序?必须要与osalInitTasks所调用任务初始化函数的顺序一致。

我们第一个任务的添加到此就完成了。

cyril3

2010-9-09 00:03:32

[i=s] 本帖最后由 cyril3 于 2010-9-9 00:16 编辑

四、加入网络

在把我们的设备加入网络之前?我需要介绍几个概念。

1?IEEE地址?也叫64位长地址。在网络中?每一个节点都是一个具体的物理设备。每个物理设备

都是独一无二的。如何从物理上标识网络上的设备呢?我们引入了IEEE这样一个地址。IEEE地址是一个

64位地址?这个地址是直接烧写进FLASH里面的?它不会因为程序的运行而改变?每个设备都有一个独

一无二的IEEE地址?从而从物理上对设备加以区分。在PC机上?每个网卡都有一个世界独一无二的MAC

地址?道理是一样的。

2?网络地址?也叫16位短地址。当设备加入网络中以后?为了在这个网络中对节点进行标识?网络

会分配给设备一个16位短地址?以此来标识此设备在网络中的地位。类似于我们常说的IP地址。

3?ENDPOINT。很多资料将其翻译为“端点”?我们不如也这么叫。不过问题的关键不是它如何称呼?

而是如何认识它。我们来研究这样一个事实:outman在看我的帖子的同时他又使用QQ和别人聊天。假

设他的电脑IP地址为192.168.1.2。那么当他的QQ好友向他发送了一句话的时候?这个信息里面包含

了目的IP地址?所以通过TCP/TP协议可以到达outman的电脑。但是问题随之而来。当outman电脑

上的操作系统接收到此条信息时?它将把这个信息交给浏览器(我们刚才说了?他在看帖子?所以肯定开

着浏览器)呢?还是交给QQ?操作系统通过怎么样的方法作出裁决呢?显然?只通过IP地址是没有办法

决定的?所以这条消息除了包含IP地址以外?还要告诉目的机?这条消息应该交由哪个应用程序来处理。

于是端口(Port)的概念产生了。操作系统为应用程序提供了很多端口?消息由IP地址到达操作系统?再

由端口找到处理消息的应用程序。同样的道理?在ZigBee的应用程序框架里(结构图请看《深入浅出Z-Stack 2006 OSAL多任务资源分配机制》)包含了最多240个应用程序对象?每个应用程序对象在

OSAL中对应了一个任务?当网络层接收到信息以后如何决定将此信息传递给哪个任务呢?ENDPOINT决

定了传递方向?于是我们可以说ENDPOINT的作用与TCP/IP协议中的端口的作用是一样的。

4?Cluster。中文翻译为“簇”。我们如何去理解“簇”这个概念呢?当一个任务接收到消息(这里所说

的消息是指无线网络之中的数据)之后?一定会对消息进行处理。但是我们的应用肯定不会盲目的处理所

有消息?消息一定会被分门别类。“簇”代表了消息的类型?为与相同簇的消息具有相同的类型?而这个类

型可以被用户自定义。

了解了这些?我们可以考虑如何将设备加入网络中。

在我们的设备加电运行以后?设备会对网络发送广播消息请求入网?协调器确认其入网请求以后会给

它分配网络地址?此设备将会作为网络中的一个节点运行。

设备加入网络由协议栈自动完成?然而将任务作为一个ZigBee应用程序对象加入到ZigBee的应用

程序框架中是如何完成的呢?

要将任务加入网络需要在任务重做一下两件事情:

1?定义此任务作为ZigBee应用程序对象所需要的信息。

2?将这些信息注册到应用程序框架中。

接下来?我们就在我们的例子中实现它。

在Cyril3App.h中定义如下宏:

#define CYRIL3APPMANAGE_ENDPOINT 15

#define CYRIL3APPMANAGE_PROFID 0x0005

#define CYRIL3APPMANAGE_DEVICEID 0x0001

#define CYRIL3APPMANAGE_DEVICE_VERSION 0

#define CYRIL3APPMANAGE_FLAGS 0

#define CYRIL3APPMANAGE_MAX_CLUSTERS 1

#define CYRIL3APPMANAGE_CLUSTERID 1

CYRIL3APPMANAGE_ENDPOINT定义了当前任务的端点?CYRIL3APPMANAGE_PROFID和

CYRIL3APPMANAGE_DEVICEID是一些有关识别的定义?在学习实验中?我们可以任意取值。

CYRIL3APPMANAGE_DEVICE_VERSION和CYRIL3APPMANAGE_FLAGS代表了硬件版本和自定义

标志?我们定义为0?不影响我们的应用开发。CYRIL3APPMANAGE_MAX_CLUSTERS定义了当前任

务的簇数量。CYRIL3APPMANAGE_CLUSTERID是我们自定义的一个簇?ID取为1。

在Cyril3AppCoordManage.c中?我们定义如下三个全局变量:


(通信 电子)ZigBee学习资料(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教学常规自查报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: