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.

Z-Stack中的extAddr不固定

Other Parts Discussed in Thread: Z-STACK, CC2530

协议栈:Z-Stack Home 1.2.2a

芯片:CC2530

一个终端和一个协调器,入网正常。

在终端,运行下列代码打印终端的短地址(网络地址)和长地址(MAC地址)。

shortAddr = NLME_GetShortAddr();
extAddr = NLME_GetExtAddr();
printf("S1 is pressed.\r\n");
printf("IEEE: ");
for (i=7; i>=0; i--) {
      if (extAddr[i]<=0x0F) 
        printf("0%X", extAddr[i]); 
      else
        printf("%X", extAddr[i]); 
      if (i==0) printf("\r\n");
}
printf("nwkID: %X\r\n", shortAddr);

打印结果:

IEEE: 00124B00213CD303
nwkID: 7732

终端用ZCL通信进行定时(每隔30s)属性上报,在协调器,从接收的消息中提取终端短地址和长地址,代码如下。

static uint8 zclSampleSw_ProcessInReportCmd(zclIncomingMsg_t *pInMsg)
{  
    int i, j;
    uint8 *attrDat, *extAddr;
    uint16 shortAddr;
    zclReportCmd_t *reportCmd;    
    
    printf("Report received:\r\n");
    shortAddr = pInMsg->srcAddr.addr.shortAddr;
    extAddr = pInMsg->srcAddr.addr.extAddr;
    printf("IEEE: ");
    for (i=7; i>=0; i--) {
      if (extAddr[i]<=0x0F) 
        printf("0%X", extAddr[i]); 
      else
        printf("%X", extAddr[i]); 
      if (i==0) printf("\r\n");
    }
    printf("nwkID: %X\r\n", shortAddr);

打印结果:

Report received:
IEEE: 124B00000A007732
nwkID: 7732
Rx value: AA 55 01 00 00
Zigbee Coord heartbeat, vdd=3449mV
Command: OFF
Report received:
IEEE: 00302A2208447732
nwkID: 7732
Rx value: AA 55 01 00 00
Zigbee Coord heartbeat, vdd=3449mV
Command: ON
Report received:
IEEE: 000000004A007732
nwkID: 7732
Rx value: AA 55 01 00 00

可以看到,打印的短地址都是7732,和终端本地打印的短地址一致。但是协调器打印的长地址,在不停的变化,只有最后4位等于短地址,是固定的。

请问,协调器从接收消息中获取的extAddr是怎么定义的?