请问一下,如何在程序里面修改secondary IEEE address?希望论坛大神指点一二,下面是程序,但是修改过后用flash programmer读到的地址不是修改过后的
static void zmain_ext_addr(void)
{
uint8 nullAddr[Z_EXTADDR_LEN] = {0xFF, 0xFF 0xFF, 0xFF 0xFF, 0xFF, 0xFF, 0xFF};
uint8 writeNV = TRUE;
HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);
// First check whether a non-erased extended address exists in the OSAL NV.
if ((SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL)) ||
(SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress)) ||
(osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN)))
{
// Attempt to read the extended address from the location on the lock bits page
// where the programming tools know to reserve it.
HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);
if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN))
{
// Attempt to read the extended address from the designated location in the Info Page.
if (!osal_memcmp((uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN))
{
osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN);
}
else // No valid extended address was found.
{
// uint8 idx=0;
#if !defined ( NV_RESTORE )
writeNV = FALSE; // Make this a temporary IEEE address
#endif
#if defined ZDO_COORDINATOR
aExtendedAddress[0] = 0x10;
#elif defined RTR_NWK
aExtendedAddress[0] = 0x20;
#else
aExtendedAddress[0] = 0x4B;
#endif
// MSB has historical signficance.
aExtendedAddress[1] = 0x54;
aExtendedAddress[2] = 0x44;
aExtendedAddress[3] = 0x5A;
aExtendedAddress[4] = 0x47;
aExtendedAddress[5] = 0xFF;
aExtendedAddress[6] = 0xFF;
aExtendedAddress[7] = 0xFF;
}
}
if ( writeNV )
{
(void)osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress);
}
}
// Set the MAC PIB extended address according to results from above.
(void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress);
}