花了点时间静下心对NV区结构作了一番推理,推理过程是一边推一边做笔记,也就是说后面有可能否定前面的结论,但是最后的结论应该是正确的。
#define OSAL_NV_PAGE_SIZE 2048
NV页空间大小2048个字节
#define Z_EXTADDR_LEN 8
ZigBee物理扩展地址64位 占8个字节的空间
#define OSAL_NV_IEEE_OFFSET (OSAL_NV_PAGE_SIZE - Z_EXTADDR_LEN)
如此看来8个字节IEEE地址在NV区的存放地址偏移量应为:2048-8 = 2040
#define OSAL_NV_PAGE_FREE (OSAL_NV_PAGE_SIZE - Z_EXTADDR_LEN)
OSAL_NV_PAGE_FREE NV页空闲的空间2048-8 = 2040,显然是表明除了8个预定给扩展地址,其余均为空闲可用
/* The last Flash page will reserve an IEEE addr block at the end of the page where the tools know
* to program the IEEE.
*/
最后一个闪存页存放IEEE地址块,并且在此页的末端,目前为止,我还无法确定,是一个页面尺寸2048个字节还是整个NV区的尺寸为2048个字节。
#define OSAL_NV_IEEE_PAGE 63
从上面的一段话,我们可以知道IEEE地址块是存放在最后一个NV页上,如此看来,页索引是0-63,也就是说NV区共有64个页面,2048字节算是2K,那么64个NV页面应该就是128K,正符合cc2430 128K的特性,这样我们就可以理解了,无论是程序代码还是非易失量都存放在这些规范好的64个NV页面里。其实,应用开发人员最关心的是那些与程序运行相关的非易失参数值存放在哪里。到此,显然我们可以知道,所有非易失参量均存放在最后一个NV页,其余的NV页为存放代码的空间。
回过头重复这两句话:
#define OSAL_NV_IEEE_OFFSET (OSAL_NV_PAGE_SIZE - Z_EXTADDR_LEN)
#define OSAL_NV_IEEE_PAGE 63
初步推理结论:可以解释为8字节的IEEE地址存放在非易失区第63页第2040开始的连续8个字节。 |