这部分阐述了OSAL的非易失性内存管理系统。系统为应用提供了一种永久储存信息的方式。协议栈也使用它来保存一些协议必要的项目。非易失性函数用来读写用户定义的项目包括任意的数据类型例如结构体和数组。用户可以读写这个项目,或者项目里的单一元素通过设置适当的长度。
每部分NV有一个ID,有些被占用了,以下是分块表。
0x0000 Reserved
0x0001 – 0x0020 OSAL
0x0021 – 0x0040 NWK
0x0041 – 0x0060 APS
0x0061 – 0x0080 Security
0x0081 – 0x00A0 ZDO
0x00A1 – 0x0200 Reserved
0x0201 – 0x0FFF Application
0x1000 -0xFFFF Reserved
在使用API时有一些重要的注意点:
1. 。。。例如,最好的写NV的时间是关闭接收之后
2. 尽量减少NV的写频率,耗费时间和电源,对于flash有擦写次数的限制。
3. 如果一个或多个NV项目的结构发生变化,特别是当从一个升级版本的z-stack到另一个,有必要擦除和重新初始化NV内存。否则,在NV项目上的读和写操作的改变将失败或产生错误的结果。
osal_nv_item_init()
概述:
初始化一个NV项目。这个函数检查一个NV项目的存在与否。如果不存在,它将被建立和初始化随着数据一起传给函数,这个函数必须在调用osal_nv_read() or osal_nv_write()之前被调用
原型:
byte osal_nv_item_init( uint16 id, uint16 len, void *buf );
参数:
Id :用户定义的项目ID
Len :项目的大小
Buf :指向项目初始化的数据。如果没有初始化的数据,设置为NULL
返回值:
ZSUCCESS 成功
NV_ITEM_UNINIT 成功但是项目之前不存在
NV_OPER_FAILED 操作失败
osal_nv_read()
概述:
从NV中读数据,可以读取整个项目,或是项目中有索引指定的元素,数据复制到*buf
原型:
byte osal_nv_read( uint16 id, uint16 offset, uint16 len, void *buf );
参数:
Id :用户定义的项目ID
Offset :Memory offset into item in bytes.
Len :项目长度
Buf :数据保存缓冲区指针
返回值:
ZSUCCESS Success
NV_ITEM_UNINIT Item is not initialized
NV_OPER_FAILED Operation failed
osal_nv_write()
概述:
写数据到NV
原型:
byte osal_nv_write( uint16 id, uint16 offset, uint16 len, void *buf );
参数:
Id : 用户定义的ID
Offset :Memory offset into item in bytes.
Len :项目长度
Buf :写数据
返回值:
ZSUCCESS 成功
NV_ITEM_UNINIT 项目没有初始化
NV_OPER_FAILED 操作失败
osal_offsetof()
概述:
这个宏计算出一个单元内结构的内存偏移量。他对NV API函数涌来计算偏移量参数很有用。
原型:
osal_offsetof(type, member)
参数:
Type :结构类型
Member :结构成员