无线传感网络设计与实践-高级实验任务书 - 图文(4)

2019-08-20 19:00

MAC:MAC 层目录,包含了 MAC 层的参数配置文件及其 MAC 的 LIB 库的函数接口文件。

MT(Monitor Test):实现通过串口可控各层,于各层进行直接交互。 NWK(ZigBee Network Layer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS 层库的函数接口

OSAL(Operating System (OS) Abstraction Layer):协议栈的操作系统。 Profile:AF(Application work) 层目录,包含 AF 层处理函数文件。 Security:安全层目录,安全层处理函数,比如加密函数等。

Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。 Tools:工程配置目录,包括空间划分及 ZStack 相关配置信息。 ZDO(ZigBee Device Objects):ZDO 目录。

ZMac: MAC 层目录,包括 MAC 层参数配置及 MAC 层 LIB 库函数回调处理函数。 ZMain:主函数目录,包括入口函数及硬件配置文件。

Output:输出文件目录,这个是EW8051 IDE 自动生成的。

Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。

整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段,下面将逐一详细分析。

(1)TI的Z-Stack协议栈启动流程

可打开ZMain文件夹中的Zmain.c文件,查看int main(void)函数,协议栈即从此函数开始运行。其启动流程如下所示:

(2)系统初始化

系统上电后,通过执行ZMain文件夹中ZMain.c的ZSEG int main( )函数实现硬件的初始化。硬件初始化需要根据HAL文件夹中的hal_board_cfg.h文件配置寄存器8051的寄存

16

器。TI官方发布Z-stack的配置针对的是TI官方的开发板CC2430DB、CC2430EMK等,如采用其他开发板,则需根据原理图设计改变hal_board_cfg.h文件配置。如按键多少及其对应的I/O口,LED指示灯的多少及其对应的I/O口,串口的波特率及中断还是DMA操作方式,是否有LCD等。也可以通过宏定义的方式,将硬件的功能模块的操作放开或屏蔽掉。 下面列出main函数,并在其掉用的函数处对其进行注释说明: int main( void ){ //关全局中断

osal_int_disable( INTS_ALL );

//板相关的硬件初始化,如时钟、LED等 HAL_BOARD_INIT();

//确保电源电压比正常运行的电压高 zmain_vdd_check();

//参数堆栈及返回地址堆栈清0 zmain_ram_init();

//判别是上电复位,复位键复位还是看门狗复位 InitBoard( OB_COLD );

//初始话硬件抽象层驱动,如Timers、Adc,Dma,Flash,Aes,Leds,Uart,Key,Spi,and Lcd等 HalDriverInit();

//初始化FLASH存储器系统 osal_nv_init( NULL );

//初始化基本的非易失性存储器的项目,初始话Z-Stack全局变量。如果一个项目在非易失性//存储器中没有,则将缺省值写入其中。 zgInit();

//初始化MAC层 ZMacInit();

//决定起始的扩展IEEE地址 zmain_ext_addr();

//如果无网络层,则调用afInit()对无线射频部分进行初始化 #ifndef NONWK afInit(); #endif

//初始化操作系统,初始化存储器系统、消息队列、定时器、电源管理系统、系统任务等

17

osal_init_system();

//开全局中断

osal_int_enable( INTS_ALL );

//进行板硬件的最后初始化,如键盘,摇杆等初始化 InitBoard( OB_READY );

//如果使用LCD,则调用用于LCD硬件的初始化 #ifdef LCD_SUPPORTED zmain_lcd_init(); #endif

//显示如IEEE地址等设备信息, zmain_dev_info();

//如果使用了看门狗,则将看门狗使能 #ifdef WDT_IN_PM1

WatchDogEnable( WDTIMX ); #endif

//启动操作系统,将不会从此函数返回 osal_start_system(); // No Return from here

//不会到达这里 return ( 0 ); }

当顺利完成上述初始化时,执行osal_start_system( )函数开始运行OSAL 系统。该任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务则调用tasksArr[ ]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。程序流程如下图所示。osal_start_system( )一旦执行,则不再返回Main( )函数。

18

(3)OSAL任务

OSAL是协议栈的核心,Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。通过osalInitTasks( )函数创建OSAL任务,其中TaskID为每个任务的唯一标识号。任何OSAL任务必须分为两步:一是进行任务初始化;二是处理任务事件。任务初始化主要步骤如下: 1)初始化应用服务变量。

const pTaskEventHandlerFn tasksArr[ ]数组定义系统提供的应用服务和用户服务变量,如MAC层服务macEventLoop、用户服务SampleApp_ProcessEvent等 2)分配任务ID和分配堆栈内存

void osalInitTasks( void )主要功能是通过调用osal_mem_alloc( )函数给各个任务分配内存空间,和给各个已定义任务指定唯一的标识号。 3)在AF层注册应用对象

通过填入endPointDesc_t数据格式的EndPoint变量,调用 afRegister( )在AF层注册EndPoint应用对象。通过在AF层注册应用对象的信息,告知系统afAddrType_t地址类型数据包的路由端点,例如用于发送周期信息的SampleApp_Periodic_DstAddr和发送LED闪烁指令的SampleApp_Flash_DstAddr。 4)注册相应的OSAL或则HAL系统服务

在协议栈中,Z-stack提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册。值得注意的是,有且仅有一个OSAL Task可以注册服务。例如注册键盘活动响应可调用RegisterForKeys( )函数。 5)处理任务事件

处理任务事件通过创建“ApplicationName”_ProcessEvent( )函数处理。一个OSAL任务除了强制事件(Mandatory Events)之外还可以定义15个事件。下面对这些事件进行介绍:

AF_DATA_CONFIRM_CMD:

调用 AF_DataRequest()函数数据请求成功的指示。Zsuccess 确认数据请求传输成功,如果数据请求设置 AF_ACK_REQUEST 标志位,那么,只有最终目的地址成功接收后,Zsuccess 确认才返回。如果如果数据请求没有设置 AF_ACK_REQUEST 标志位,那么,数据请求只要成功

传输到下跳节点就返回 Zsuccess 确认信息。 AF_INCOMING_MSG_CMD:

AF 信息输入指示 KEY_CHANGE

键盘动作指示

ZDO_NEW_DSTADDR

匹配描述符请求(Match Deor Request)响应指示。(例如:自动匹配) ZDO_STATE_CHANGE

网络状态改变指示 (4)网络层信息

Zigbee设备有两种网络地址:1个是64位的IEEE地址,通常也叫作MAC地址或者扩展地址(Extended address),另一个是16位的网络地址,也叫做逻辑地址(Logical address)或者短地址。64位长地址是全球唯一的地址,并且终身分配给设备。这个地址可由制造商设定或者在安装的时候设置,是由IEEE来提供。当设备加入Zigbee网络被分配一个短地址,在其所在的网络中是唯一的。这个地址主要用来在网络中辨识设备,

19

传递信息等。

协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在DEFAULT_ CHANLIST配置文件里。如果ZDAPP_ CONFIG_ PANID定义的PAN ID是0xFFFF(代表所有的PAN ID),则协调器根据它的IEEE地址随机确定一个PAN ID。否则,根据ZDAPP_ CONFIG_ PANID的定义建立PAN ID。当节点为Router或者End Device时,设备将会试图加入DEFAULT_ CHANLIST所指定的工作频段。如果ZDAPP_ CONFIG_ PANID没有设为0xFFFF,则Router或者End Device会加入ZDAPP_ CONFIG_ PANID所定义的PAN ID。

设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入网络或者在加入网络之前先处理其他事件,可以通过定义HOLD_AUTO_START来实现。通过调用ZDApp_StartUpFromApp( )来手动定义多久时间之后开始加入网络。

设备如果成功的加入网络,会将网络信息存储在非易失性存储器(NV Flash)里,掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设备对网络就有一定的记忆功能。对NV Flash的动作,通过NV_RESTORE( )和NV_ITNT( )函数来执行。

有关网络参数的设置大多保存在协议栈Tools文件夹的f8wConfig.cfg里。 (5)路由

Z-Stack采用无线自组网按需平面距离矢量路由协议AODV,建立一个Hoc网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息。

ZigBee End Device不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果End Device想发送信息给另外一个End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。 2. Z-Stack简单无线收发实验 2.1 实验目的

(1)学习点对点无线数据收发原理及相关技术。

(2)学习如何修改Z-Stack协议栈程序以实现点对点无线数据收发。 2.2 实验内容

在IAR集成开发环境中修改Z-Stack协议栈程序,以实现简单无线收发。 2.3 预备知识

(1)了解C语言的基本知识;

(2)了解IAR中编写和调试程序的方法。

(3)了解Z-Stack协议栈结构、工作原理及程序修改方法。 2.4 实验设备

(1)硬件:PC机、CC2000仿真器、网关板及带指示扩展板的通用调试母板、USB线;

(2)软件:PC机操作系统 Windows 98(2000、XP) + IAR开发环境。

20


无线传感网络设计与实践-高级实验任务书 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:北京市十二中新高一入学分班考试+选拔考试试题

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

马上注册会员

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