教程part1中task1中第4步。多了一个#endif(32行),导致编译不通过。删除之后,编程成功,但运行绑定之后,系统死机
case zstackmsg_CmdIDs_ZDO_DEVICE_ANNOUNCE:
#if defined (Z_POWER_TEST)
#if defined (POWER_TEST_POLL_DATA)
{
zstackmsg_zdoDeviceAnnounceInd_t *pInd;
pInd = (zstackmsg_zdoDeviceAnnounceInd_t*)pMsg;
// save the short address of the ZED to send ZCL test data
powerTestZEDAddr = pInd->req.srcAddr;
// start periodic timer for sending ZCL data to zed
OsalPortTimers_startReloadTimer(appServiceTaskId, SAMPLEAPP_POWER_TEST_ZCL_DATA_EVT, Z_POWER_TEST_DATA_TX_INTERVAL);
}
#endif
#else
{
zstackmsg_zdoDeviceAnnounceInd_t *pInd;
pInd = (zstackmsg_zdoDeviceAnnounceInd_t*)pMsg;
zstack_zdoActiveEndpointReq_t pReq;
pReq.dstAddr = pInd->req.srcAddr;
pReq.nwkAddrOfInterest = pInd->req.devAddr;
shortAddr = pInd->req.srcAddr;
memcpy(bindAddr, &(pInd->req.devExtAddr), Z_EXTADDR_LEN);
Zstackapi_ZdoActiveEndpointReq(appServiceTaskId, &pReq);
}
#endif
break;
//此处多了endif!!!!!!!!!!!!!编译不通过。
#endif
//...
break;
case zstackmsg_CmdIDs_ZDO_SIMPLE_DESC_RSP:
{
zstackmsg_zdoSimpleDescRspInd_t *pInd;
pInd = (zstackmsg_zdoSimpleDescRspInd_t*)pMsg;
for (uint8_t i = 0; i < pInd->rsp.simpleDesc.n_outputClusters; i++)
{
if (*(pInd->rsp.simpleDesc.pOutputClusters) == ZCL_CLUSTER_ID_GEN_ON_OFF)
{
zstack_sysNwkInfoReadRsp_t pRsp;
Zstackapi_sysNwkInfoReadReq(appServiceTaskId, &pRsp);
zstack_zdoBindReq_t pReq;
pReq.nwkAddr = pRsp.nwkAddr;
pReq.bindInfo.clusterID = ZCL_CLUSTER_ID_GEN_ON_OFF;
pReq.bindInfo.srcEndpoint = SAMPLELIGHT_ENDPOINT;
pReq.bindInfo.dstAddr.addrMode = (zstack_AFAddrMode)Addr64Bit;
pReq.bindInfo.dstAddr.endpoint = pInd->rsp.simpleDesc.endpoint;
EP = pInd->rsp.simpleDesc.endpoint;
memcpy(pReq.bindInfo.dstAddr.addr.extAddr, &bindAddr, Z_EXTADDR_LEN);
memcpy(pReq.bindInfo.srcAddr, &(pRsp.ieeeAddr), Z_EXTADDR_LEN);
Zstackapi_ZdoBindReq(appServiceTaskId, &pReq);
}
pInd->rsp.simpleDesc.pOutputClusters++;
}
}
break;
case zstackmsg_CmdIDs_ZDO_ACTIVE_EP_RSP:
{
zstackmsg_zdoActiveEndpointsRspInd_t *pInd;
pInd = (zstackmsg_zdoActiveEndpointsRspInd_t*)pMsg;
zstack_zdoSimpleDescReq_t pReq;
pReq.dstAddr = pInd->rsp.srcAddr;
pReq.nwkAddrOfInterest = pInd->rsp.nwkAddrOfInterest;
for (uint8_t i = 0; i < pInd->rsp.n_activeEPList; i++)
{
pReq.endpoint = pInd->rsp.pActiveEPList[i];
Zstackapi_ZdoSimpleDescReq(appServiceTaskId, &pReq);
}
}
break;