CC2540_非易失性(NV)内存管理
2015-01-14 11:10
281 查看
这部分阐述了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项目。这个
4000
函数检查一个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 :结构成员
每部分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项目。这个
4000
函数检查一个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 :结构成员
相关文章推荐
- Z-STACK之OSAL_Nv非易失性存储解读上
- Z-STACK之OSAL_Nv非易失性存储解读上
- [置顶] Z-STACK之OSAL_Nv非易失性存储解读上
- Z-STACK之OSAL_Nv非易失性存储解读上
- Cocos2d-x学习(十六):Cocos2d-x内存管理(二)
- OC基础使用(三 内存管理)
- 主题五 内存管理的艺术----30.内存中的三雄并立
- linux内存管理——伙伴关系算法
- [黑马程序员]14[OC语言]OC内存管理部分学习笔记总结
- Java内存管理:深入Java内存区域
- Java内存管理 内存如何分配
- 黑马程序员———OC学习第五天(内存管理)
- [Virtualization]ESXi体系结构与内存管理(三)控制内存分配
- Swing实现:模拟优先级CPU调度与内存管理(2)
- (4.4.1.1) Android内存管理机制详解
- 【stm32f407】基于SRAM的内存管理
- [iPhone开发]Objective-C内存管理教程和原理剖析
- Java内存管理和垃圾回收
- 对象内存管理
- linux内核中内存管理数据结构关系及机制(原题:linux虚拟内存组织结构浅析)