This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2651P3:zstackmsg_Cmdids_ZDO_device_announce 中的指针错误

Guru**** 2463330 points
Other Parts Discussed in Thread: CC2651P3

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1216681/cc2651p3-bad-pointer-in-zstackmsg_cmdids_zdo_device_announce

器件型号:CC2651P3

我正在尝试订阅 ZDO_DEVICE_Announce、以便在器件发送 Announce 消息时收到器件的 NWK 和 IEEE 地址。 我正在使用 zc_SampleApp_LP_CC2651P3_tirtos7_ticlang (simplelink_cc13xx_cc26xx_SDK_6_41_00_17)。 我从回调中收到错误的指针。

我已为此订阅:
zdoCBREQ.HAS_deviceAnnounce = true;
zdoCBReq.deviceAnnounce =真;
(void) Zstackapi_DevZDOCBREQ (SampleApp_serviceTaskId、&zdoCBREQ);

处理程序在这里:
静态空 SampleApp_processZStackMsgs (zstackmsg_genericREQ_t * pMsg)

 switch (pMsg->HDR.event)
 {
  案例 zstackmsg_Cmdids_ZDO_DEVICE_Announce:
  {
   zstackmsg_zdoDeviceAnnounceREQ_t * pReq =(zstackmsg_zdoDeviceAnnounceREQ_t *) pMsg;
   processDeviceAnnounce (pREQ->pREQ);
  }
  中断;

我在 processDeviceAnnounce ()行设置了一个断点。 当我将新器件加入网络时、它会发送 Device Announce、然后断点被触发。 使用调试器、我查看 pMsg。 pMsg 是有效的指针。

这是 pMsg 结构定义:
typedef 结构_zstackmsg_genericreq_t

 /**讯息标头

 *事件字段必须设置为@ref ZStack_CmdID
 */
 zstackmsg_hdr_t HDR;

 /**讯息命令字段*/
 空*pReq;

}zstackmsg_genericREQ_t;

实现

typedef 结构_zstackmsg_hdr_t

 /** event */
 uint8_t 事件;
 /**将保留默认的响应状态字段。 */
 uint8_t 状态;
#ifdef OSAL_PORT2TIRTOS
 uint8_t srcServiceTask;
#endif
}zstackmsg_hdr_t;

以下是使用调试器观察到的值:
pMsg->HDR.event       0x48
pMsg->HDR.status      0
pMsg->HDR.srcServiceTask 0
pMsg->pReq         0x515D515D

0x515D515D 不是一个有效的 RAM 地址。 在 CC2651 RAM 中的起始地址为0x20000000。

值0x515D515D 不一致。 例如、尝试3次后、我看到了0x515D515D、0x2A0B2A0B 和0x5E735E73。

谢谢。
Andy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Andy、您好!

    zstackmsg_zdoDeviceAnnounceREQ_t 不是 zstackmsg_Cmdids_ZDO_DEVICE_Announce 消息的正确结构、请 改用 zstackmsg_zdoDeviceAnnounceInd_t。  这可以通过应用程序示例的代码(即 light/SW)以及 Zigbee 基础 SimpleLink Academy 实验进行演示。  您还可以参考 Z-Stack API 指南。   

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    好的、我看到问题是我引用了指定使用 zstackmsg_zdoDeviceAnnounceReq_t 的 zstackapi.h:

    ZStack 指示(回调)
    ===================================
    以下消息将通过传递给您的应用程序
    向注册至少一个端点后的 OsalPort 消息
    Zstackapi_AfRegisterReq (),您必须调用 Zstackapi_freIndMsg()到
    完成处理后释放消息:

    - zstackmsg_Cmdids_af_data_confirm_indd -[zstackmsg_afDataConfirmInd_t]
    (@ref _zstackmsg_afdataconfirmind_t)
    - zstackmsg_Cmdids_af_incoming_MSG_IND -[zstackmsg_afIncomingMsgInd_t]
    (@ref _zstackmsg_afincomingmsgin_t)

    以下消息将通过传递给您的应用程序
    通过设置正确的字段来请求它们之后的 OsalPort 消息
    (有和标记)改为"true"
    [ZStack_devZDOCBREQ_t](@ref _ZStack_devzdocbreq_t)并进行调用
    Zstackapi_DevZDOCBREQ (),你必须调用 Zstackapi_freIndMsg()到
    完成处理后释放消息:

    - zstackmsg_Cmdids_ZDO_DEVICE_Announce -[zstackmsg_zdoDeviceAnnounceReq_t]
    (@ref _zstackmsg_zdodeviceannouncirq_t)
    - zstackmsg_Cmdids_ZDO_NWK_ADDR_RSP -[zstackmsg_zdoNwkAddrRspind_t]
    (@ref _zstackmsg_zdonwkaddrrspind_t)
    - zstackmsg_Cmdids_ZDO_IEEE-ADDR_RSP -[zstackmsg_zdoIeeAddrRspInd_t]
    (@ref _zstackmsg_zdoieeeedrspind_t)
    - zstackmsg_Cmdids_ZDO_node_Desc_RSP -[zstackmsg_zdoNodeDescRspInd_t]
    (@ref _zstackmsg_zdonodedescrspind_t)
    - zstackmsg_Cmdids_ZDO_POWER_DESC_RSP -[zstackmsg_zdoPowerDescRspInd_t]
    (@ref _zstackmsg_zdopowerdescrspind_t)

    谢谢。
    Andy