当前位置:文档之家› ZigBee学习之37——osalInitTasks()分析

ZigBee学习之37——osalInitTasks()分析

ZigBee学习之37——osalInitTasks()分析
ZigBee学习之37——osalInitTasks()分析

ZigBee学习之37——osalInitTasks()分析

此函数完成了任务ID的分配,以及所有任务的初始化,如果我们要加入自己的应用必须在这里加入自己的任务初始化函数,以使系统可以自动为任务分配一个ID号。如果是想要自己创建一个应用,那么必须首先实现两个东西,一是任务回调函数队列,另一个是系统任务初始化及ID 分配。任务队列是一个pTaskEventHandlerFn结构的数组,只要把每个任务相关的回调函数按初始化队列中的顺序填到数组中就可以了,他们的实现一般是写在自己的应用源码里面。介绍一个例子(SimpleApp):

const pTaskEventHandlerFn tasksArr[] = {

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#if defined( MT_TASK )

MT_ProcessEvent,

#endif

APS_event_loop,

ZDApp_event_loop,

SAPI_ProcessEvent

};

void osalInitTasks( void )

{

uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

macTaskInit( taskID++ );

nwk_init( taskID++ );

Hal_Init( taskID++ );

#if defined( MT_TASK )

MT_TaskInit( taskID++ );

#endif

APS_Init( taskID++ );

ZDApp_Init( taskID++ );

SAPI_Init( taskID );

}

注意这里两个实体里面的顺序要一一对应!

macTaskInit( taskID++ ),nwk_init( taskID++ ),APS_Init( taskID++ )定义在mac_api.h,nwk.h,APS.h中,但没有找到其实现,可能被打包在链接库文件里面了。

void Hal_Init( uint8 task_id )

{

/*将系统分配的任务的ID传给变量*/

Hal_TaskID = task_id;

}

//开始器件的启动【ZDApp.c】

void ZDApp_Init( byte task_id )

{

uint8 capabilities;

//保存系统分配的任务ID

ZDAppTaskID = task_id;

//初始化ZDO全局的短地址,并配置成无效的一个地址ZDAppNwkAddr.addrMode = Addr16Bit;

ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;

// ZDAppNwkAddr为一个地址数据结构:addrMode只有几种:AddrNotPresent = 0,

AddrGroup = 1,

Addr16Bit = 2,

Addr64Bit = 3,

AddrBroadcast = 15

typedef struct

{

union

{

uint16 shortAddr;

ZLongAddr_t extAddr;

} addr;

byte addrMode;

} zAddrType_t;

(void)NLME_GetExtAddr(); //这是个ZstackAPI,返回指向此器件64位地址的指针

//检查"Hold Auto Start",如果启动的时候按着SW1,此函数就会设置设备的状态为:DEV_HOLD

ZDAppCheckForHoldKey();

//初始化ZDO物件,并且设置设备

ZDO_Init();

//【ZDObject.c】

void ZDO_Init( void )

{

#if defined ( REFLECTOR )

//如果器件定义的是“反射器”则需要定义个路由的设备结构,REFLE

CTOR是一个编译选项,如果定义了这个编译选项则使用“源绑定”,

源绑定的定义有这样一句话In the Zigbee 2006 release,the bindin

g mechanism is implemented in all devices and is called sour

ce binding(在Zigbee2006中,绑定机制在所有的设备中实现,这就

叫做源绑定),如果使用源绑定则绑表是存放在源设备中的,这样就不

用为找绑定入口而先向协调器提交绑定请求,但是方面又增大了源节点

的开销,因为要为保存绑定表而开辟一段静态内存。默认是不使用源绑

定。

ZDO_EDBind = NULL;

#endif

//设置创建设备的类型

ZDODeviceSetup();

//根据设置的编译选项来调用不同的网络层管理函数

//ZDO_COORDINATOR:设备作为协调器

//SOFT_START:如果没有协调器则设备以协调器启动,否则

以路由器启动

//这里面的几个函数都做成了静态库了看不到源码!看来TI的

所谓开放也不是完全开放

static void ZDODeviceSetup( void )

{

#if defined( ZDO_COORDINATOR )

NLME_CoordinatorInit();

#endif

#if defined ( REFLECTOR )

#if defined ( ZDO_COORDINATOR )

APS_ReflectorInit( APS_REFLECTOR_PUBLIC );

#else

APS_ReflectorInit( APS_REFLECTOR_PRIVATE );

#endif

#endif

#if !defined( ZDO_COORDINATOR ) || defined( SOFT_

START )

NLME_DeviceJoiningInit();

#endif

}

}

// 向AF层注册endpoint(终端)

afRegister( (endPointDesc_t *)&ZDApp_epDesc );

endPointDesc_t ZDApp_epDesc =

{

ZDO_EP,

//0,ZDO为终端0

&ZDAppTaskID,

//指向应用任务号

(SimpleDescriptionFormat_t *)NULL,

// 终端的简单描述,No Simple description for ZDO

(afNetworkLatencyReq_t)0 // No Network Latency req

};

#if defined( ZDO_USERDESC_RESPONSE )

ZDApp_InitUserDesc();

#endif // ZDO_USERDESC_RESPONSE

//从NIB中读取属性

NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities);

//设置设备能处理的广播消息

NLME_SetBroadcastFilter( capabilities );

//根据设备状态启动设备,如果不是DEV_HOLD则启动ZDO设备,否则闪烁LED1 if ( devState != DEV_HOLD )

{

ZDOInitDevice( 0 );

//启动网络中的设备,在这个函数中会调用ZDApp_NetworkInit()来启动网络,并发送ZDO_NETWORK_INIT事件,当ZDO事件循环ZDApp_event_loop()接收到这个事件后会执行ZDO_StartDevice()来启动设备

}

else

{

// Blink LED to indicate HOLD_START

HalLedBlink ( HAL_LED_4, 0, 50, 500 );

}

ZDApp_RegisterCBs();

//注册ZDO消息,只有注册了的消息才能以ZDO_CB_MSG消息的形式发送给指定的任务

} /* ZDO_Init() */

事件处理函数SAPI_ProcessEvent(),在任何地方只要调用osal_set_event()对这个处理函数对应的任务ID设置了事件的话就会启动这个事件处理函数。

系统消息事件SYS_EVENT_MSG包含几个子类的消息(子类可以在文档【Z-Stack Sample Applic ations (F8W-2006-0023).pdf】中找到),SYS_EVENT_MS由函数osal_msg_send()【OSAL.C】发送,osal_msg_send()首先将传过来的任务ID加入到消息包中,然后再把这个消息包通过osal_ msg_enqueue加入到消息队列中,(osal_qHead是消息队列的头指针),然后我们再来查找调用osal_msg_send()的函数,这样我们就可以知道系统消息SYS_EVENT_MSG是在什么情况下如何发出的了。afDataConfirm()【AF.c】会调用osal_msg_send(),并且构造的消息中包含事件AF_D ATA_CONFIRM_CMD(此事件说明由AF_DataRequest()初始化的数据已成功发送,若AF_DataRequ est()的选项中要求有回应,则此事件表示目标已收到数据)

void afDataConfirm( uint8 endPoint, uint8 transID, ZStatus_t status )

{

endPointDesc_t *epDesc;

afDataConfirm_t *msgPtr;

//每个终端都需要一个描述,如果没有则直接返回

epDesc = afFindEndPointDesc( endPoint );

if ( epDesc == NULL )

return;

………………

// Determine the incoming command type

msgPtr = (afDataConfirm_t *)osal_msg_allocate( sizeof(afDataConfirm_t) );

if ( msgPtr )

{

// Build the Data Confirm message

msgPtr->hdr.event = AF_DATA_CONFIRM_CMD;

//设置消息的事件为AF_DATA_CONFIRM_CMD

msgPtr->hdr.status = status;

msgPtr->endpoint = endPoint;

msgPtr->transID = transID;

//给指定任务发送消息,并且设置事件数组中SYS_EVENT_MS事件准备好

osal_msg_send( *(epDesc->task_id), (byte *)msgPtr );

}

}

换个思路看看SAPI的事件处理函数当接收到数据的时候干了些什么,然后找出接收数据的函数!从文档中我们得知当采集器接收到数据后就会发送到串口,好那么就找出发送串口数据的处理函数:SAPI_ReceiveDataIndication(),当收到系统消息中的事件为AF_INCOMING_MSG_CMD事调用此函数,afBuildMSGIncoming()会构造基于此事件的消息,而afIncomingData将会调用此函数,

作者:Free

原文来源:61IC中国电子在线

ZigBee学习笔记CC2530

已入门选手进一步学习的重点 我发现最近群里很多人已经可以算是大致入门了,能够在原有例子的基础上进行一些简单工作,实现数据传输。但是我也发现很多人开始把精力投入到钻研协议栈代码细节上面去了,实际上这种学习方式是有问题的。第一:如果从应用的角度看,协议栈的一些实现细节是没有必要钻研的,这就好比是现在的PC机,已经有了Windows系统了,我们在这个系统之上实现自己应用程序的时候其实并不需要对Windows内部实现细节过多地关注,只要能够自由地在Windows下开发应用程序(其实就是调用大量的API函数)就可以了;第二:如果想从协议栈本身入手去做一些深入的工作,Zstack是不适合的,因为它不是完全开源,真想在路由算法、加密算法等方面做工作的话,目前TinyOS这样的开源协议栈才是首选。所以,进一步学习的重点应该是:在什么时间什么地点调用什么函数的问题! 那么如何来提高这方面的技能呢? 1、浏览ZDP和ZDO相关代码,熟悉一下都有什么函数,这两个部分都做了什么,学习的过程中千万不要去钻研代码实现的细节,只要了解其流程以及都作了什么就可以了,否则你一定会迷失在那成千上万行的代码之中而不能自拔。ZDP和ZDO的实现文件里面 有大量的函数在以后具体应用中可以去调用。 2、典型例子中的ZDO消息使用其实只有那么几个例子,比如: ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。在深入应用的时候那么几个典型的消息注册是不够 用的,比如我在一个应用中就注册了以下: ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析 End_Device_Bind_rsp ZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析 Match_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析 Device_annce ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析 Active_EP_rsp ZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析 Simple_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析 NWK_addr_rsp 在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。 3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好

ZigBee网络拓扑结构显示

实验二ZigBee网络拓扑结构显示 【实验目的】 1、熟悉Qt编写程序的方法; 2、了解Qt显示ZigBee网络拓扑结构的工作原理; 【实验设备】 1、装有RedHat AS5系统或装有RedHat AS5虚拟机的PC机一台; 2、物联网开发设计平台一套; 【实验要求】 使用Qt为ZigBee网络编写拓扑结构; 1、编程要求:使用提供的API函数编写应用程序; 2、实现功能:构建ZigBee网络拓扑结构; 3、实验现象:显示网络的拓扑结构; 【实验原理】 本实验箱针对Qt下,将服务程序的API做了一定的封装,并提供了非常方便使用的接口函数,可以让用户在Qt环境下绘制Zigbee网络的拓扑结构。这些函数都被封装在一个叫做TopologyWidget的类中,它们的详细介绍如下: 【函数原型】void TopologyWidget::SetTopologyArea(const QString &ip, QScrollArea *area); 【功能】设置用来显示拓扑图的滚动区域控件 【参数】ip: 运行服务程序的网关(计算机)的IP地址area: 用来显示拓扑图的滚动区域控件【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 【函数原型】void TopologyWidget::UpdateTopologyArea(QScrollArea *area); 【功能】立即刷新滚动区域控件中的拓扑图 【参数】area: 用来显示拓扑图的滚动区域控件 【返回值】无 【头文件】使用本函数需要包含"topologywidget.h" 在实际应用中,用户需要首先在界面中放置一个,假设其名称为“scrollArea”,只需要在窗体的构造函数中,完成了setupUi的操作之后,调用TopologyWidget::SetTopologyArea函数即可使拓扑图显示在这个滚动区域中,参考下面的代码。 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 将界面中的scrollArea设置为用来显示拓扑图 TopologyWidget::SetTopologyArea("127.0.0.1", ui->scrollArea); } 【实验步骤】 1.双击打开桌面上的VMware Player。如图 2.1所示;

物联网专业需要看的书籍

物联网专业需要看的书籍

课程1、物联网产业与技术导 论使用电子工业出版社《物联网:技术、应用、标准、安全与商业模式》等等教材。在学完高等数学,物理,化学,通信原理,数字电路,计算机原理,程序设计原理等课程后开设本课程,全面了解物联网之RFID、M2M、传感网、两化融合等技术与应用。 课程2、C语言程序设计使用清华大学出版社《C语言程序设计》等教材。物联网涉及底层编程,C语言为必修课,同时需要了解OSGi,OPC,Silverlight等技术标准 课程3、Java程序设计,使用机械工业出版社《Java语言程序设计教程》等教材。物联网应用层,服务器端集成技术,开放Java技术也是必修课,同时需要了解Eclips e,SWT, Flash, HTML5,SaaS等技术 课程4、无线传感网络概论,使 用无线龙通讯科技出版社《现代无线传感器网络概论》、北京航空航天大学出版社《短距离无线通讯入门与实战》等教材。学习各种无线

RF通讯技术与标准,Zigbee, 蓝牙,WiFi,GPR S,CDMA,3G, 4G, 5G等等 课程5、TCP/IP网络与协议,《TCP/IP网络与协议》,清华大学出版社,等教材。TCP/IP以及OSI网络分层协议标准是所有有线和无线网络协议的基础,Socket 编程技术也是基础技能,为必修课 课程6、嵌入式系统技,《嵌入式系统技术教程》,人民邮电出版社等教材。嵌入式系统是物联网感知层和通讯层重要技术,为必修课 课程7、传感器技术概论,《传感器技术》,中国计量出版社,等教材。物联网专业学生需要对传感器技术与发展,尤其是在应用中如何选用有所了解,但不一定需要了解传感器的设计与生产,对相关的材料科学,生物技术等有深入了解 课程8、RFID技术概论,《射频识别(RFID)技术原理与应用》,机械工业出版社,

ZigBee技术网络层的路由算法分析(1).

ZigBee技术网络层的路由算法分析(1) 摘要基于IEEE802.15.4标准的 ZigBee网络是一种具有强大组网能力的新型无线个域网,其中的路由算法是研发工作的重点。本文介绍了IEEE802.15.4标准及ZigBee规范的协议模型,重点研究了ZigBee协议网络层的路由算法,分析了Tree路由及Z-AODV路由算法,在此基础上提出了ZigBee网格型网络中基于数据特性的路由选择机制,该机制在网络性能和低功耗方面有明显的优势,并且可以平衡节点能量,最后简单介绍了ZigBee节点的硬件实现。 关键词 ZigBee协议;网络;IEEE802.15.4;路由算法;Tree路由;Z-AODV路由 1 概述 ZigBee技术是由英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦等公司在2002年10月共同提出设计研究开发的具有低成本、体积小、能量消耗小和传输速率低的无线通信技术。 2000年12月,IEEE 802 无线个域网(WPAN,Wireless Personal Area Network)小组成立,致力于WPAN无线传输协议的建立。2003年12月,IEEE正式发布了该技术物理层和MAC层所采用的标准协议,即IEEE 802.15.4协议标准,作为ZigBee技术的网络层和媒体接入层的标准协议。2004年12月,ZigBee联盟在IEEE 802.15.4 定义的物理层(PHY)和媒体接入层(MAC)的基础上定义了网络层和应用层,正式发布了基于IEEE 802.15.4的ZigBee标准协议。 2 网络层的研究 ZigBee技术的体系结构主要由物理层(PHY)、媒体接入层(MAC)、网络/安全层以及应用框架层组成,各层之间的分布如图1所示。 图1 ZigBee技术协议组成 PHY层的特征是启动和关闭无线收发器、能量检测、链路质量、信道选择、清除信道评估(CCA)以及通过物理媒体对数据包进行发送和接收。MAC 层可以实现信标管理、信道接入、时隙管理、发送确认帧、发送连接及断开连接请求,还为应用合适的安全机制提供一些方法。它包含具有时间同步信标的可选超帧结构,采用免碰撞的载波侦听多址访问(CSMA-CA)。安全层主要实现密钥管理、存取等功能。网络层主要用于ZigBee的LR-WPAN网的组网连接、数据管理等。应用框架层主要负责向用户提供简单的应用软件接口(API),包括应用子层支持APS(Application Sub-layer Support)、ZigBee设备对象ZDO (ZigBee Device Object)等,实现应用层对设备的管理,为ZigBee技术的实际应用提供一些应用框架模型等,以便对ZigBee技术的开发应用。 网络层的定义包括网络拓扑、网络建立、网络维护、路由及路由的维护。

ZigBee学习Z-stack外部中断

ZigBee学习Z-stack外部中断 硬件抽象层:就是对硬件层做好了各种初始化,用户不用考虑硬件的初始配置,直接使用即可。 hal_driver.c文件: HalDriverInit():用户可在此函数中添加硬件的初始化操作,如定时器、ADC、DMA、FLASH、AES、LCD、LED、UART、KEY、SPI、HID等(还有用于配置外部中断,类似按键的中断方式查询键值) Hal_ProcessEvent(): 处理HAL发生的事件、如:KEY、LED、电源管理等,用户可以在此添加处理自己的HAL事件,此事件ID必须是唯一的,定义在hal_driver.h中。如:HAL_KEY_EVENT(按键轮询与抖动)、HAL_LED_BLINK_EVENT(LED闪烁)、HAL_SLEEP_TIMER_EVENT(Power saving). Hal_ProcessPoll(): 被osal_start_system()调用,用于HAL_Timer和HAL_UART的事件轮询,关于系统编译连接,只要没有定义相关的宏定义,相应的驱动就不会编译进去,减少代码占用的空间。有以下的宏定义: 具体操作是: Options->C/C++ Options->Preprocessor->Defined Symbols->enter:HAL_XXX=TRUE; when XXX is ADC,UART,LED,LCD,KEY 不编译进代码,只要将其定义成FALSE 如何定做适合自己的HAL处理的程序 ①修改原文件的方式: 1、HAL\include下的头文件应该保留一样。 2、在HAL\Target\hal_xxx.c修改相应的驱动函数,hal_adc.c, hal_key.c, hal_lcd.c, hal_led.c, hal_timer.c, and hal_uart.c 3、硬件驱动配置可以被修改在hal_board_cfg.h ②增加用户自己的目标驱动 1、增加新的头文件,在hal\include 2、在hal\Target\hal_xxx.c添加自己运行函数,xxx为自己的目标 3、如果GPIO有冲突或者没用到,应该保证驱动不被编译,否则后果严重。 4、检查GPIO有没有正确设置或冲突,通过hal_board_cfg.h 5、不想被编译,或者是老的文件,没用到的文件,可以通过选择options->"Exclude form build" 外部中断程序中断处理函数的定义:可以查看 hal\Target\hal_XXX.c\hal_mcu.h HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNCTION (prototype, vector) { /* Do something when this interrupt happens!!! */ }

zigbee学习笔记讲解

关于ZIGBEE技术 Zigbee的由来 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。 Zigbee是什么 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。 不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。 每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。 Zigbee技术的应用领域 Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。另外它还可以对局部区域内移动目标例如城市中的车辆进行定位. 通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多; 2.要求传输的数据量不大,而要求设备成本低; 3.要求数据传输可性高,安全性高; 4.设备体积很小,不便放置较大的充电电池或者电源模块; 5.电池供电; 6.地形复杂,监测点多,需要较大的网络覆盖; 7.现有移动网络的覆盖盲区; 8.使用现存移动网络进行低数据量传输的遥测遥控系统。 9.使用GPS效果差,或成本太高的局部区域移动目标的定位应用。 Zigbee 技术的特点 省电:两节五号电池支持长达6个月到2年左右的使用时间。 可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用

2016年度秋物联网技术基础学习知识本科试卷

2016年秋|物联网技术基础|本科(试卷) 1. 以下关于EPC-96I型编码标准的描述中错误的是( )。 (A) 用来标识是哪一类产品的对象分类字段长度为24位 (B) 用来标识产品是由哪个厂家生产的域名管理字段长度为28位 (C) 用来标识每一件产品的序列号字段长度为36位 (D) 用来标识编码标准版本的版本号字段长度为6位 分值:2 2. 以下关于入侵检测系统特征的描述中,错误的是( )。 (A) 监测和发现可能存在的攻击行为,采取相应的防护手段 (B) 重点评估DBMS系统和数据的完整性 (C) 检查系统的配置和漏洞 (D) 对异常行为的统计分析,识别攻击类型,并向网络管理人员报警 分值:2 3. 基于物联网的智能安防系统不具有的特点是( )。 (A) 覆盖范围更

小 (B) 更实时 (C) 更全面 (D) 更智慧 分值:2 4. 以下关于ADSL接入技术的描述中错误的是( )。 (A) 从互联网下载文档的信道称为上行信道 (B) 数字用户线是指从用户家庭、办公室到本地电话交换中心的一对电话线 (C) 家庭用户需要的下行信道与上行信道的带宽是不对称的 ADSL技术可以最大限度地保护电信运营商在组建电话交换网方面的投 (D) 资 分值:2 5. 以下关于数据增长特点的描述中错误的是( )。 新的数据种类与新的数据来源在不断增 (A) 长

(B) 同一类数据的数据量在快速增长 (C) 数据量单位的增长在加快 (D) 数据增长的速度在加快 分值:2 6. 基于物联网技术的环境监测网络不具有的特点是( )。 监测更加精 (A) 细 监测更加全 (B) 面 监测数据更 (C) 少 监测更加实 (D) 时 分值:2 7. 下面关于智能医疗环境中的医院信息系统的描述中错误的是( )。

zigbee路由算法研究

毕业设计(论文) 题目:zig bee路由算法研究(zigbee R outing algorithm research) 姓名:王龙龙 学号:0904010117 指导教师:郝毫毫(副教授) 专业:测控技术与仪器 班级:测控01 所在学院:电气信息学院 年月

目录 摘要.....................................................................................................II Abstract................................................................................................ III 第一章绪论.......................................................................................... (1) 1.1 XXXX ............................................................................................. . (1) 1.2 XXXX ............................................................................................... .. x 第二章 XXXX .. (x) 2.1 XXXX .............................................................................................. (x) 2.2 XXXX .............................................................................................. (x) 2.3 XXXX .............................................................................................. (x) 第三章 XXXX............................................................................................. ..x 3.1 XXXX .............................................................................................. (x) 3.2 XXXX .............................................................................................. (x) 第四章 XXXX (x) 4.1 XXXX .............................................................................................. (x) 4.2 XXXX .............................................................................................. (x) 4.3 XXXX .............................................................................................. (x) 总结 (x) 致谢 (x) 参考文献 (x) 附录(可选项) (x) 说明:目录中的标题只列出2级标题(如1.1, 2.3等),不要出现3级及以上标题(如 2.1.2等)。章节不宜划分过细,目录内容不宜超过一页。

ZigBee学习电子笔记

第一讲

第二讲 https://www.doczj.com/doc/c13540949.html,2530通用I/O口有21个:P0/P1/口个8个;P2口5个,其中,P1_0、P_1 有20mA的驱动能力,其余只有4mA 2.IO口配置相关的寄存器(3个) PxSEL: P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。

IO的两种工作模式: 1.普通IO口模式:点灯、监测按键输入 2.片上外设模式:作为串口或者其他非普通IO口 PxDIR:P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出

PxINP:P0INP/P1INP/P2INP: 输入情况下,注意P2INP寄存器后3位的用法(见下图):

输出示例(以P0_0为例): 1)设置P0_0为普通IO口工作模式,非片上外设:P0SEL=0xFE(&11111110) 2)让P0_0作为输出用,非输入监测用:P0DIR=0x01(+ 00000001) 3)输出(如P0_0=0或P0_0=1等)。 输入示例(让P1_2作为输入): 1)设置P1_2为普通IO口工作模式,非片上外设:P1SEL=0xfd(11111011) 2)让P1_2作为输入检测用,非输出用P1DIR=0xfd(11111011) 3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式) 4)检测用: If (P1_2= =0 or 1) { } Else { } 总结:由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。 自己编程示例:

CC2530开发环境搭建与快速入门攻略

OHY研修笔记之“物联网应用技术”01 CC2530单片机开发技术开发环境搭建与快速入门攻略 广东职业技术学院 2017年4月15日

【引言】 在本次笔记中讲述2部分内容: 第一部分:CC2530的开发环境搭建。 第二部分:建立第一个工程-LED跑马灯程序。 通过这两部分的学习,完成掌握了CC2530单片机的开发流程,通过一个LED 跑马灯程序,快速掌握IAR开发环境下CC2530单片机的工程创建、代码编写、程序编译、仿真调试和代码烧写,达到快速入门的目的。 第一部分:CC2530的开发环境搭建 由于CC2530使用的是8051内核,需要选用IAR的IAR Embedded Workbench for 8051版本,作为开发环境。这里需要安装四个内容:IAR软件、CC Debugger 仿真器驱动、烧写软件SmartRF Flash Programmer和Z-Stack协议栈。 一、IAR开发环境的安装 1、打开“IAR-EW8051-8101”文件中的“ew8051”文件夹,运行setup.exe程序,安装8.10.1版本的IAR软件,点击下一步即可License输入界面。 2、因为在要输入License的对话框中要输入序列号,先运行“IAR-EW8051-8101”文件中keygen.exe软件,生成相关的信息。

3、先输入License number,然后下一步。 4、再输入对应的License Key,点击下一步。 5、选择Custom安装。

6、选择所需要安装的组件。 7、如有需要可以更改安装的路径。 8、然后一直下一步到Install,开始安装

zigbee学习笔记3-通信例程之GenericApp

zigbee学习笔记3-通信例程之GenericApp 2011-09-22 11:02 刚入手的朋友,对Z-Stack 非常迷糊的时期,如果能够跑通几个例子、看几个演示,那么可以大大提高学习兴趣;另外如果知道某个例子的大致功能及实现,那么在去看具体实现过程目的性就非常明确。 首先来看看TI 究竟有哪些例子:可以看出其例子是非常丰富的。 GenericApp(设备互相绑定传送信息-hellow world),Location(定位),SampleApp(设备发送和接收LED灯信息),SimpleApp(温度和灯开关,和智能家居结合使用的,have Profile),HomeAutomation(智能家居的应用,have Profile),SerialApp(串行传输的应用),Transmit(发送应用),ZLOAD(协议文件夹中只有Source)。这样看来还是不少的。其中SampleApp 例子已经在前面的学习中有所涉及,可以说前面的所有学习都是基于这个例子的,所以这里就不测试它了。Location 是定位的测试例子,这里我的硬件是不够的,所以也不做测试。其他我都做点测试,能成功的就成功,不能成功的就失败,这个我也没办法。 1、GenericApp 这个实验是两个模块相互绑定后可以对传数据,模块绑定之后,两个模块之间相互传输字符串"Hello World"。 实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示该节点为协调者同时显示网络ID号。然后打开一个终端节点或路由器的电源,此时节点会自动加入网络。加入网络成功后,节点会显示自己的节点类型、网络地址和父节点的网络地址。 节点加入网络成功后,首先把主机模块的摇杆往右拔一下,然后把要绑定模块的RIGHT按一下,如果两边的LED4 都熄灭或是点亮后马上熄灭,表示绑定成功。绑定成功后,两个节点就开始相互定时发送数据,并在对方的LCD屏上显示出来,发送的数据为"Hello World"。此时如果把相互绑定模块中的left 按一下,可以发送Match Description Request命令,对方则显示Match Description Request信息。(以上无线龙手册提供) 2 关键函数分析: 我开始没搞清楚,功能是个啥大约浏览了下,这个例子似乎还与设备的所以还决定看看程序来判断这个例子的功能。绑定有关系,在key control 描述中发现 //***************** Key control**************************// SW2: initiates end device binding //--初始化中断设备绑定 SW4: initiates a match description request //--初始化一个匹配描述请求 2.1 按建处理程序中发现: if ( keys & HAL_KEY_SW_2 ) { HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); // Initiate an End Device Bind Request for the mandatory endpoint dstAddr.addrMode = Addr16Bit; dstAddr.addr.shortAddr = 0x0000; // Coordinator ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(), GenericApp_epDesc.endPoint, GENERICAPP_PROFID, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE ); } 很明显这里按键2(右键)是发送绑定请求的命令。 if ( keys & HAL_KEY_SW_4 ) { HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF ); // Initiate a Match Deion Request (Service Discovery) dstAddr.addrMode = AddrBroadcast; dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR; ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR, GENERICAPP_PROFID,

计算机科学与技术物联网专业

计算机科学与技术物联网专业方向介绍 什么是物联网工程师?当然就是从事物联网技术的人员。“物联网技术”的核心和基础,仍然是“互联网技术”,是在互联网技术基础上的延伸和扩展的一种网络技术;其用户端延伸和扩展到了任何物品和物品之间,进行信息交换和通讯。因此,物联网技术的定义是:通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,将任何物品与互联网相连接,进行信息交换和通讯,以实现智能化识别、定位、追踪、监控和管理的一种网络技术叫做物联网技术。 一、专业简介 物联网(The Internet of Things,简称IOT),是指“物物相连的互联网”,即通过射频识别(RFID)装置、红外感应器、全球定位系统、激光扫描器等多种信息传感设备,按照约定的协议,把任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。它是在互联网基础上延伸和扩展的网络。物联网被认为是继计算机、互联网之后,世界信息产业的第三次浪潮,已列为国家战略性新兴产业,并写入十二五规划纲要。政府将采取多项措施支持企业开展物联网技术创新与应用,物联网产业及其相关技术具有广阔的发展空间。 本专业适应国家战略性新兴产业发展的需求,培养德、智、体全面发展,系统地掌握计算机软件相关技术和物联网工程领域的专门知识与关键技术,具备综合运用软件技术、信息技术、现代传感器、信息处理和嵌入式等技术进行信息标识、获取、处理、传输和控制等物联网工程的实践能力,能够在软件行业和物联网应用相关的各行业中从事科学研究、系统集成、设备制造、关键技术研发和推广、网络运营和管理等工作的高素质应用型复合人才。 二、物联网核心技术该如何学习?需要什么样的基础 物联网和其他专业来比,学习门槛基本是一样的,没有什么特殊要求。物联网是偏重于硬件设计,所以学员大学所学专业最好是硬件相关的专业,例如电子、自动化控制、通信、精仪等专业,学习物联网非常适合,对于纯软件开发专业的学员,没有基本的硬件技术基础,学习物联网刚开始会有一些困难。以物联网培训机构华清远见的专业培训课程大纲为例,可以更直观更系统的了解物联网工程师所需掌握的一些基本技能:* 数字电路基础 * 模拟电路基础 * 计算机组成原理 * C 语言基础 * 常用仪器仪表的使用(万用表、示波器等) * 低功耗 ARM 处理器与接口技术 ARM Cortex-M0 开发、ARM Cortex-M3 开发、ARM Cortex-M4 开发、接口开发; * Cadence 原理图及 PCB 电路设计 Capture 原理图设计规范、原理图原件库建立方法、层次图的设计方法、Allegro PCB 设计规范、PCB 原件库的建立、设计规则添加、多层电路板的设计方法、高速 PCB 设计理论、制作 PCB 电路板流程; * 实时操作系统 * 传感器与无线传感网络

ZigBee网络Cluster-Tree优化路由算法研究

ZigBee网络Cluster-Tree优化路由算法研究 引言无线通信和嵌入式微传感器技术的快速发展促进了无线传感器网络的崛起。ZigBee协议基于IEEE 802.15.4无线标准制定,包括应用层、网络层、安全层等,实现了网络的自组织和自维护的功能。在无线传感器网络中,节点的能量是有限的,如果节点在最后因为自身的能量消耗殆尽而死亡,将会对整个网络的传输性能造成很大影响。因此,在实际应用中,根据不同的网络情况来选择最符合应用需求的路由协议,让路由协议根据网络拓扑选择合适的路径,平均分布节点的传输能量,降低网络的功耗是网络层必须要考虑的任务。1 ZigBee 路由算法研究依据设备的能力,ZigBee网络中的设备可以分为全功能设备(Full Function Device,FFD)和半功能设备(Reduced Function Device,RFD)。FFD能转发其他设备的数据帧,RFD则不能。当FFD加入一个网络时,它可以作为协调器。协调器会周期性地广播数据帧,周围的RFD能够发现并加入网络,形成一个星型拓扑网络。在星型拓扑中,协调器负责控制整个网络,所有终端设备都直接与协调器通信,并且由它维护。ZigBee网络层还支持树型和网状网络。树型网络采用分级路由的策略在网络中传送数据和控制信息,而网状网络则可以进行点对点的通信。在树型网络中,根节点(协调器节点)和所有的内部节点(路由器节点)是FFD,而RFD只能作为叶子节点(终端节点)。当协调器或路由器加入网络时,它必须被分配唯一的网络地址。1.1 网络地址分配ZigBee协议规范使用一个分布式地址方案分配网络地址,它设计为给每个潜在父节点提供一个有限的网络地址子块。当一个设备成功加入网络后,其父节点给该节点自动分配一个唯一的网络地址。1.2 ZigBee路由算法网络层支持Cluster-Tree、AODVjr和Cluster-Tree+AODVjr算法(以下简称C+A算法)等多种路由算法,因此ZigBee网络的路由协议兼具树型网络和网状网络的特性。1.2.1 Cluster-Tree算法树路由机制是根据网络地址和节点间的父子关系来实现路由的。如果目的地址设备不是该路由器的子孙,则直接将数据帧转发给该路由器的父节点,其父节点将按照同样的步骤进行路由。1.2.2 AODVjr算法AODVjr是对AODV算法的一种简化改进,当源节点要寻找到达目的节点的路径时,先向其邻居节点组播RREQ分组。收到该分组的邻居节点若具备路由能力,则建立指向源节点的反向路由回复,同时继续向自己的邻居节点组播该RREQ分组。若不具备路由能力,则通过Cluster-Tree路由算法将该分组交由其子孙节点或父节点进行转发。当目的节点接收到此RREQ分组后,通过单播的方式向源节点回复RREP分组,同时,所有接收到此RREP分组的节点都将更新记录自己的邻居表,路由建立成功。实验证明,AODVjr算法在保持了AODV原始功能的基础上,控制开销比AODV算法更小,因此更节能。1.2.3 Cluster-Tree+AODVjr算法在此算法中,网络中的节点被分成了4类:Coordinator、RN+、RN-和RFD。其中RN+具有足够的存储空间和能力来进行AODVjr协议;而RN-则因存储空间受限,不能够进行AODVjr协议。Coordinator、RN+、RN-都具有路由功能,在通信时,如果目的节点不是邻居节点,RN+将会启动AODVjr,主动查找到达目地节点的最佳路径;RN-节点只能通过树路由算法来寻找下一跳的节点。仿真证明,采用Cluster-Tree和AODVjr相结合的路由协议在保证分组递交率的情况下,具有比单独使用其中一种路由协议更低的控制开销和平均时延。2 优化ZigBee路由算法2.1 ZigBee路由算法问题Cluster-Tree算法必须按照簇树型结构地址分配方式来寻址,路由效率低,并且源节点到目的节点的传输路径由于跳数过多,会影响网络时延。AODVjr算法在路由发现过程中,会产生分组大量泛洪问题。例如,当目的节点是源节点的子节点时,若采用AODVjr向邻居节点发送RREQ分组,则向其父节点以上的节点发送RREQ分组是多余的;若目的节点不是源节点的子节点,则采用AODVjr向其子节点方向发送RREQ分组是多余的。假设网络的最大深度是1,则数据帧可能被转发的最长路径是21,因此当跳数大于21时,就应停止对RREQ分组的继续广播,将其丢弃;假设从源节点到目的节点的最小跳数为M,当RREQ分组被转发的次数大于M时,再继续转发是多余的。

ZigBee学习笔记CC2530

2、典型例子中的ZDO消息使用其实只有那么几个例子,比如: ZDO_RegisterForZDOMsg(TaskID,End_Device_Bind_rsp)这样的,这是讲底层的一些事件消息引入到应用层的注册方法。在深入应用的时候那么几个典型的消息注册是不够用的,比如我在一个应用中就注册了以下: ZDO_RegisterForZDOMsg( TaskID, End_Device_Bind_rsp ); // 我自己解析End_Device_Bind_rsp ZDO_RegisterForZDOMsg( TaskID, Match_Desc_rsp ); //我自己解析Match_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析Device_annce ZDO_RegisterForZDOMsg( TaskID, Active_EP_rsp); //我自己解析Active_EP_rsp ZDO_RegisterForZDOMsg( TaskID, Simple_Desc_rsp); //我自己解析Simple_Desc_rsp ZDO_RegisterForZDOMsg( TaskID, NWK_addr_rsp); //我自己解析NWK_addr_rsp 在具体应用中,你会根据不同的网络需求去调用很多协议栈的设置好的req和处理rsp消息,那么协议栈都有那些req和rsp是你进一步学习所应该深入认识的。 3、在自己使用系统的req和rsp的时候,如果你不知道该如何处理,你最好去看看MT是如何实现的,在MT 功能模块中,对协议栈的绝大多数req和rsp都有调用和实现的例子可以参考,虽然我们在自己的应用中很少回去使用MT,但是Mt 的实现代码却是最好的参考资料。 上面几点是我目前能够想到的一些事情,以后有想法再补充吧! 最后我举个例子:比如你想实现节点入网后自动报告自己的长短地址,然后主控节点处理节点的报告,并且向这个节点要求其发回存在于其上的EP信息,我们应该这样做: 1、在新节点的ZDO_STATE_CHANGE消息处理函数中调用: ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(), \ ZDO_Config_Node_Descriptor.CapabilityFlags, 0 ); 这个函数会自动以广播方式报告自己的短地址和长地址,其余在网的节点都可以收到;你也可以采用按键策略,新节点入网后通过按键触发来报告自己的长短地址: 2、在主控节点的初始化函数中添加: ZDO_RegisterForZDOMsg( TaskID, Device_annce); //我自己解析Device_annce 这样,当新入网节点Annce的时候,主控节点收到这个消息,然后通知给你的任务(TaskID),你的任务则需要在case ZDO_CB_MSG:处理函数中添加处理这个annce的代码,如: case Device_annce: //device annouce process. ProcessDeviceAnnce(inMsg); break; 在自己实现的ProcessDeviceAnnce函数中,你可以提取出新来节点的长短地址。。。。。 3、有了新节点的长短地址,其实什么都可以做了,我现在利用新节点的长短地址来请求其返回它的EP信息: 在适当的地方调用ZDP_ActiveEPReq( &zDestAddr, shortAddr, SECURITY_FLAG); 这是一个直接面向目标短地址的单播req,目标节点收到这个req之后,会自动处理的(代码协议栈已经实现了),Zstack协议栈实际上实现了绝大多数响应req的函数,然后返回一个rsp,这一部分其实你不用管,也就是说目标节点方面你一行代码都不用写,存在其上的所有EP信息就会被返回到主控节点;但是Zstack没有实现绝大多数rsp处理函数,因为rsp一般来将用户会有不同的想法,所以他也没办法实现; 4、主控节点如果想处理返回的活动EP信息(比如EP号),那么需要在任务初始化的时候注册一下由任务处理这个返回消息:

ZigBee路由算法分析培训资料

Z i g B e e路由算法分析

摘要基于IEEE802.15.4标准的ZigBee网络是一种具有强大组网能力的新型无线个域网,其中的路由算法是研发工作的重点。本文介绍了IEEE802.15.4标准及ZigBee规范的协议模型,重点研究了ZigBee协议网络层的路由算法,分析了Tree路由及Z-AODV路由算法,在此基础上提出了ZigBee网格型网络中基于数据特性的路由选择机制,该机制在网络性能和低功耗方面有明显的优势,并且可以平衡节点能量,最后简单介绍了ZigBee节点的硬件实现。 关键词 ZigBee协议;网络;IEEE802.15.4;路由算法;Tree路由;Z-AODV路由 1 概述 ZigBee技术是由英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦等公司在2002年10月共同提出设计研究开发的具有低成本、体积小、能量消耗小和传输速率低的无线通信技术。 2000年12月,IEEE 802 无线个域网(WPAN,Wireless Personal Area Network)小组成立,致力于WPAN无线传输协议的建立。2003年12月,IEEE正式发布了该技术物理层和MAC层所采用的标准协议,即IEEE 802.15.4协议标准,作为ZigBee技术的网络层和媒体接入层的标准协议。2004年12月,ZigBee联盟在IEEE 802.15.4 定义的物理层(PHY)和媒体接入层(MAC)的基础上定义了网络层和应用层,正式发布了基于IEEE 802.15.4的ZigBee标准协议。 2 网络层的研究

ZigBee技术的体系结构主要由物理层(PHY)、媒体接入层(MAC)、网络/安全层以及应用框架层组成,各层之间的分布如图1所示。 图1 ZigBee技术协议组成 PHY层的特征是启动和关闭无线收发器、能量检测、链路质量、信道选择、清除信道评估(CCA)以及通过物理媒体对数据包进行发送和接收。MAC层可以实现信标管理、信道接入、时隙管理、发送确认帧、发送连接及断开连接请求,还为应用合适的安全机制提供一些方法。它包含具有时间同步信标的可选超帧结构,采用免碰撞的载波侦听多址访问(CSMA-CA)。安全层主要实现密钥管理、存取等功能。网络层主要用于ZigBee的LR-WPAN网的组网连接、数据管理等。应用框架层主要负责向用户提供简单的应用软件接口(API),包括应用子层支持APS(Application Sub-layer Support)、ZigBee设备对象ZDO (ZigBee Device Object)等,实现应用层对设备的管理,为ZigBee技术的实际应用提供一些应用框架模型等,以便对ZigBee技术的开发应用。 网络层的定义包括网络拓扑、网络建立、网络维护、路由及路由的维护。 2.1 ZigBee的网络拓扑结构 ZigBee定义了三种拓扑结构:星型拓扑结构(Star),主要为一个节点与多个节点的简单通信设计;树型拓扑结构(Tree),使用分等级的树型路

相关主题
文本预览
相关文档 最新文档