ZIGBee组网流程 zigbee自组网

第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络
//第一步:Z-Stack  由 main()函数开始执行,main()函数共做了 2件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统
ZIGBee组网流程 zigbee自组网
int main( void)                          

{

  .......

// Initialize the operating system

osal_init_system();  //第二步,操作系统初始化
......

osal_start_system(); //初始化完系统任务事件后,正式开始执行操作系统

  ......


//第二步,进入 osal_init_system()函数,执行操作系统初始化

uint8 osal_init_system( void)     //初始化操作系统,其中最重要的是,初始化操作系统的任务

{

// Initialize the Memory Allocation System

  osal_mem_init();

// Initialize the message queue

  osal_qHead = NULL;

// Initialize the timers

  osalTimerInit();

// Initialize the Power Management System

  osal_pwrmgr_init();

// Initialize the system tasks.

osalInitTasks();  //第三步,执行操作系统任务初始化函数

// Setup efficient search for the first free block of heap.

  osal_mem_kick();

  return ( SUCCESS );

}
//第三步,进入osalInitTasks()函数,执行操作系统任务初始化

void osalInitTasks( void)      //第三步,初始化操作系统任务

{

  uint8 taskID = 0;

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

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

//任务优先级由高向低依次排列,高优先级对应 taskID 的值反而小

  macTaskInit( taskID++ ); //不需要用户考虑

  nwk_init( taskID++);     //不需要用户考虑

  Hal_Init( taskID++);     //硬件抽象层初始化,需要我们考虑

#if defined( MT_TASK)      

  MT_TaskInit( taskID++ );

#endif

  APS_Init( taskID++);      //不需要用户考虑

#if defined ( ZIGBEE_FRAGMENTATION ) 

  APSF_Init( taskID++ );

#endif

ZDApp_Init( taskID++ );  //第四步,ZDApp层,初始化 ,执行ZDApp_init函数后,如果是协调器将建立网络,如果是终端设备将加入网络。

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined (ZIGBEE_PANID_CONFLICT ) 

  ZDNwkMgr_Init( taskID++ );

#endif

  SerialApp_Init( taskID ); //应用层SerialApp层初始化,需要用户考虑    在此处设置了一个按键触发事件,
                                        //当有按键按下的时候,产生一个系统消息

}                           

//第四步,进入ZDApp_init()函数,执行ZDApp层初始化
//The first step

void ZDApp_Init( uint8 task_id)    //The first step,ZDApp层初始化。

{

// Save the task ID

  ZDAppTaskID = task_id;

// Initialize the ZDO global device short address storage

  ZDAppNwkAddr.addrMode = Addr16Bit;

  ZDAppNwkAddr.addr.shortAddr =INVALID_NODE_ADDR;

  (void)NLME_GetExtAddr();  //Load the saveExtAddr pointer.

// Check for manual "Hold AutoStart"

  ZDAppCheckForHoldKey();

// Initialize ZDO items and setup the device - type of device tocreate.

  ZDO_Init();

// Register the endpoint description with the AF

  // This task doesn't have a Simpledescription, but we still need

  // to register the endpoint.

  afRegister( (endPointDesc_t*)&ZDApp_epDesc );

#if defined( ZDO_USERDESC_RESPONSE )

  ZDApp_InitUserDesc();

#endif // ZDO_USERDESC_RESPONSE

// Start the device?

  if ( devState != DEV_HOLD)       //devState 初值为DEV_INIT , 所以在初始化ZDA层时,就执行该条件语句

  {

ZDOInitDevice( 0);    //The second step, 接着转到ZDOInitDevice()函数,执行The third step;

  }

  else

  {

// Blink LED to indicate HOLD_START

   HalLedBlink ( HAL_LED_4, 0, 50, 500 );

  }

  ZDApp_RegisterCBs();

}

//The third step,执行ZDOInitDevice()函数,执行设备初始化

uint8 ZDOInitDevice( uint16 startDelay )  //Thethird step, ZDO层初始化设备,

{
   .......

// Trigger the network start

ZDApp_NetworkInit( extendedDelay);   //网络初始化,跳到相应的函数里头,执行Thefourth step
   .......
}

//The fouth step,执行 ZDApp_NetWorkInit()函数

void ZDApp_NetworkInit( uint16 delay )  //Thefourth step,网络初始化

{

  if ( delay )

  

爱华网本文地址 » http://www.aihuau.com/a/25101018/370835.html

更多阅读

外地车过户北京流程是怎样的 北京汽车过户外地流程

外地车过户北京流程是怎样的——简介外地车过户北京流程是怎样的呢?一般需要外地车过户北京的车主多半是屡次摇号不中,买车就先上了一个外地牌照,这样也能在北京使用。但是摇号指标有时候也会幸运的砸到头上,几个月后摇号号了,这就计划着

酒店无线组网方案 酒店无线网络覆盖

酒店无线组网方案——简介酒店地理位置优越,交通便利,是很多商旅人士的首选。酒店注重自身服务质量及客户满意度,但是酒店原来只能为客户提供有线接口,不能满足手机、pad、笔记本等移动终端日益爆发的无线需求,因此酒店决定搭建一套优质

如何申请购买北京自住型商品房 北京自住商品房申请表

? ??北京市继公租房、经济适用房、限价房等保障性住房措施后,又推出了自住型商品房,该类房产与之前的最大不同就是没有了户口限制,凡是持有有效暂住证,连续5年(含)以上在本市缴纳社保或个税,且名下无房的非京籍家庭,都可以购买一套“自住

声明:《ZIGBee组网流程 zigbee自组网》为网友夏季微凉分享!如侵犯到您的合法权益请联系我们删除