没有合适的资源?快使用搜索试试~ 我知道了~
Sample Application工程详解
需积分: 12 2 下载量 105 浏览量
2013-01-06
09:57:31
上传
评论
收藏 21KB DOCX 举报
温馨提示
试读
20页
新手必看Sample Application是ZStack协议栈提供的一个非常简单的演示实例,实例中的每个设备都可以发送和接收两种信息:周期信息和闪烁信息。
资源推荐
资源详情
资源评论
一、Sample Application 工程概况描述
Sample Application 是 ZStack 协议栈提供的一个非常简单的演
示实例,实例中的每个设备都可以发送和接收两种信息:周期信息和
闪烁信息。
周期信息---------当设备加入该网络后,所有设备每隔 5S(加上一个
随机数,毫秒 mS 为单位)发送一个周期信息,该信息的数据载荷为
发送信息的次数。
闪烁信息---------通过按下按键 SW1 发送一个控制 LED 灯闪烁的广播
信息,该广播信息只针对组 1 内的所有设备。所有设备初始化都被加
入组 1,所以网络一旦建立完成便可执行 LED 灯闪烁实验。可以通过
按下设备的 SW2 退出组 1,如果设备退出组 1 则不再接收来自组 1
的消息,其按键 SW1 发送的消息也不再控制组 1LED 灯的闪烁。通过
再次按下 SW2 便可让设备再次加入到组 1,从而又可以接受来自组 1
的消息,其 SW1 也可以控制组 1 内设备的 LED 灯闪烁了。
当设备接收到闪烁信息会闪烁 LED 灯,而当接收到周期信息时协议栈
没有提供具体的实验现象,留给了用户自行处理,可以根据实际需要
自行更改实验代码。
在该工程中使用了两个按键 SW1 和 SW2。即 ZStack 协议栈中的
HAL_KEY_SW_1 和 HAL_KEY_SW_2。同时工程中也定义了一个事件
用来处理周期信息事件,即
SAMPLEAPP_SEND_PERIODIC_MSG_EVT[SampleApp.h]。
二、一般工程说明:
在学习 ZStack 协议栈的时候我们要把握一个重点就是事件的产生
和事件的处理。任务的初始化为事件的产生制造了“温床”,是事件产生
的前提,任何工程都需要先初始化。当有事件产生 OS 就会调用相应
的处理函数进行处理。在 OS 循环那一节我们可以看到在任务初始化
的最后一项就是应用层的初始化,而在指向处理函数的指针数组中最
后一项是对应的应用层的处理函数。应用层相关事件会由应用层处理
函数进行处理。每一层都是相互对应,各司其职。
三、Sample Application 工程初始化与事件的处理
3.1、Sample Application 工程初始化如下:
void SampleApp_Init( uint8 task_id )
{
SampleApp_TaskID = task_id;// OS 通过数参数的传递为每一层
分发任务 ID,
SampleApp_NwkState = DEV_INIT;//设定设备的网络状态为“初
始化”
SampleApp_TransID = 0;
#if de<ned ( SOFT_START )
/*SOFT_START 是一个编译选项,如果一个网络中没有协调
器可以让设备以协调器的形式启动*/
// 这里我们根据跳线决定设备是路由器或者是协调器,如果检测到
//跳线则为协调器否则为路由器,在设备启动提及如果定义了
SOFT_START
//则设备初始化时设备的类型为可选类型。当程序执行到这里就明确了
具
//体是什么类型的设备
if ( readCoordinatorJumper() )//如果检测到跳线则设备为协调器
zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;
else//如果没有检测到跳线则设备为路由器
zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;
#endif // SOFT_START
#if de<ned ( HOLD_AUTO_START )
//如果编译了 HOLD_AUTO_START 则执行以下函数
ZDOInitDevice(0);
#endif
// 设定周期信息的地址,此地址为广播地址 0xFFFF
SampleApp_Periodic_DstAddr.addrMode =
(afAddrMode_t)AddrBroadcast;
SampleApp_Periodic_DstAddr.endPoint =
SAMPLEAPP_ENDPOINT;
SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;
//设定闪烁信息的地址,此地址为组 1 的地址
SampleApp_Flash_DstAddr.addrMode =
(afAddrMode_t)afAddrGroup;
SampleApp_Flash_DstAddr.endPoint =
SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr =
SAMPLEAPP_FLASH_GROUP;
// 对端点 SAMPLEAPP_ENDPOINT 进行描述
SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_epDesc.task_id = &SampleApp_TaskID;
SampleApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t
*)&SampleApp_SimpleDesc;
SampleApp_epDesc.latencyReq = noLatencyReqs;
// 注册端点描述符
afRegister( &SampleApp_epDesc );
// 注册按键,在按键机制详细解释
RegisterForKeys( SampleApp_TaskID );
剩余19页未读,继续阅读
资源评论
跟我走吧16
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功