• cc2530串口通信流程


    //串口发送接收流程
    
    main:  //主函数
        ->osal_init_system();  //操作系统初始化
           ->osalInitTasks();    //任务初始化     
              -->ZDApp_Init(taskID++); //该函数初始化后,协调器建立网络、终端将加入网络
                  -->ZDOInitDevice(0);  //设备初始化
                     -->ZDAPP_NetworkInit(extendedDelay); //网络初始化
                        -->osal_start_timeEx(....,ZDO_NETWORK_INIT,..) //发送消息
                        -->ZDApp_event_loop()  //事件
                            -->ZDO_StartDevice((uint8)ZDO_Config.............) //开始设备
                                -->NLME_NetworkDiscoveryRequest() 建立网络
                                -->ZDO_NetworkFormationConfirmCB()  //给予ZDO层发聩信息
     
                                    -->osal_set_event(..,ZDO_NETWORK_START)启动网络事件   协调器
                                       -->ZDApp_NetworkStartEvt();  //处理网络启动事件
                                           -->osal_set_event(....,ZDO_STATE_CHANGE_EVT); //设置网络状态改变事件
                                           -->ZDAPP_event_loop();  //网络改变事件函数
                                
                                    -->ZDApp_SendMsg(....,ZDO_NWK_DISC_CNF,...);  //终端、路由器,
                                       -->ZDApp_ProcessOSALMsg()  //请求加入
                                       -->ZDO_JoinConfirmCB()  //终端设备加入网络
                                           -->ZDApp_SendMsg(...,ZDO_NWK_JOIN_IND,..); 将ZDO_NWK_JOIN_IND事件发生给ZDO层
                                           -->ZDApp_ProcessOSALMsg()
                                               -->ZDApp_ProcessNetworkJoin();  //设备加入网络
                                                  -->osal_set_event(...,ZDO_STATE_CHANGE_EVT);  //终端设备
                                                  -->NLME_StartRouteRequest(0,0,false);  //路由器  
                                                  -->osal_set_event(...,ZDO_ROUTER_START);
                                              
    
        ->osal_start_system();  //此时开始执行操作系统,不断检测操作系统是否有事件发生,有则跳去执行
    
    
    zigbee中afIncomingMSGPacket_t结构体描述的是什么?
    typedef struct
    {
      osal_event_hdr_t hdr;     /* OSAL Message header *///OSAL消息头
      uint16 groupId;           /* Message's group ID - 0 if not set *///消息组ID
      uint16 clusterId;         /* Message's cluster ID *///消息族ID
      afAddrType_t srcAddr;     /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
                                   it's an InterPAN message *///源地址类型
      uint16 macDestAddr;       /* MAC header destination short address *///MAC物理地址
      uint8 endPoint;           /* destination endpoint */ //目的端点
      uint8 wasBroadcast;       /* TRUE if network destination was a broadcast address *///广播地址
      uint8 LinkQuality;        /* The link quality of the received data frame */ //接收数据帧的链路质量
      uint8 correlation;        /* The raw correlation value of the received data frame *///接收数据帧的未加工相关值。
      int8  rssi;               /* The received RF power in units dBm *///接收的射频功率。
      uint8 SecurityUse;        /* deprecated *///弃用
      uint32 timestamp;         /* receipt timestamp from MAC *///收到时间标记。
      afMSGCommandFormat_t cmd; /* Application Data */应用程序数据
    } afIncomingMSGPacket_t;    //无线数据包格式结构体
    
    typedef struct
    {
      uint8  event;
      uint8  status;
    } osal_event_hdr_t;
    
    // Generalized MSG Command Format
    typedef struct
    {
      uint8   TransSeqNumber;
      uint16  DataLength;              // Number of bytes in TransData
      uint8  *Data;
    } afMSGCommandFormat_t;
    
    HalLedBlink(HAL_LED_1, 0, 50, 500);  //0是闪烁次数,但是0表示的是一直闪,不是不闪,50是百分之五十,就是亮灭各一半。500是周期,就是0.5s。
    
    
    
    建立网络、加入网络流程分析
    
       协调器节点:在1-10  实验8 网络通信实验2 组播通信中
    
     while(MSGpkt)  
       {  
         switch(MSGpkt->hdr.event)  
        {  
        case ZDO_STATE_CHANGE:  //建立网络后,设置事件     
          GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//???????  
          if(GenericApp_NwkState==DEV_ZB_COORD)//把该节点已初始化为协调器,则执行下面的  
          {  
           HalLedBlink(HAL_LED_2,0,50,500);    //LED2 闪烁   
           aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group);  //建立网路后,加入组。  
           osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);  
          }  
      路由器节点: 在1-10  实验8 网络通信实验2 组播通信中
     while(MSGpkt)  
        {  
          switch(MSGpkt->hdr.event)  
          { 
        case ZDO_STATE_CHANGE:   //加入网络后,加入族中  
          GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型   
          if(GenericApp_NwkState==DEV_ROUTER)  
          {  
            aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group); //加入组中  
          }  
          break;  
    终端节点:1-5   实验4   串口通信2
        while(MSGpkt)  
        {  
          switch(MSGpkt->hdr.event)  
          {  
        case ZDO_STATE_CHANGE:  
          GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型  
          if(GenericApp_NwkState==DEV_END_DEVICE)  
          {  
            //当中断节点加入网络后使用osal_set_envent()函数设置SEND_DATA_EVENT事件,当事件发生时,执行事件处理函数  
            osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);//??????????????????????????  
          }  
          break; 
    
    而上面的 GenericApp_NwkState是devStates_t GenericApp_NwkState;这样定义的,用于//保存节点状态   
    
    
    [cpp] view plain copy
    typedef enum  
    {  
      DEV_HOLD,               // Initialized - not started automatically  
      DEV_INIT,               // Initialized - not connected to anything  
      DEV_NWK_DISC,           // Discovering PAN's to join  
      DEV_NWK_JOINING,        // Joining a PAN  
      DEV_NWK_REJOIN,         // ReJoining a PAN, only for end devices  
      DEV_END_DEVICE_UNAUTH,  // Joined but not yet authenticated by trust center  
      DEV_END_DEVICE,         // Started as device after authentication  
      DEV_ROUTER,             // Device joined, authenticated and is a router  
      DEV_COORD_STARTING,     // Started as Zigbee Coordinator  
      DEV_ZB_COORD,           // Started as Zigbee Coordinator  
      DEV_NWK_ORPHAN          // Device has lost information about its parent..  
    } devStates_t;  
    刚开始时,都是在GenericApp_Init()函数中将GenericApp_NwkState=DEV_INIT。然后再通过哪几步转到为上面三种情况DEV_ZB_COORD、DEV_ROUTER、DEV_END_DEVICE中的一种。
    TI协议栈是半开源的,网络层代码并不开源。运行于端口0的ZDO负责应用层用户程序和网络层之间的通信。
    
    网络层的建立过程是由ZDO来实现的。网络建立后应用层会接受到ZDO_STATE_CHANGE消息。使用下面语句就可以读取当前网络的状态。
    
    GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型  
  • 相关阅读:
    求二叉树中最远两节点距离
    计算机系统
    webdriver高级应用- 无人工干预地自动下载某个文件
    webdriver高级应用- 改变一个页面对象的属性值
    webdriver高级应用- 在ajax方式产生的浮动框中,单击选择包含某个关键字的选项
    webdriver高级应用-js操作滚动条
    webdriver高级应用-使用JavaScript操作页面元素
    Selenium WebDriver- 指定页面加载时间
    Selenium WebDriver- 操作浏览器的cookie
    Selenium WebDriver- 操作JavaScript的prompt弹窗(使用率低)
  • 原文地址:https://www.cnblogs.com/yihujiu/p/5701345.html
Copyright © 2020-2023  润新知