我正在尝试订阅 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