参考文档:(协议栈中,有OSAL API.pdf)
D:\Texas Instruments\BLE-CC254x-1.4.2.2\Documents\osal
SNV:Simple Non-Volatile ,简单非易失
注意:
要花几百毫秒的时间,期间中断也可能停止
不能在中断服务中调用
不要经常写snv
11.2osal_snv_read( )
说明
从NV读整个item的数据到*pBuf
原型
uint8 osal_snv_read( osalSnvId_t id, osalSnvLen_t len, void *pBuf );
参数
id – User-defined item ID.
len – Item length in bytes.
*pBuf – Data is read into this buffer.
返回值
返回值有两种:SUCCESS (成功) NV_OPER_FAILED(失败,如果以前没有写过这个单元,就会失败)
例子
int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
11.3 osal_snv_write( )
原型
uint8 osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf );
11.3.3 Parameter Details
id – User-defined item ID.
len – Item length in bytes.
*pBuf – Data to write.
11.3.4 Return
也有两种返回值:SUCCESS 和 NV_OPER_FAILED。
注意,之前没有初始化到NVsystem的单元也可以写
example
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
阿莫的例程
//用于测试的一个结构体
typedef struct
{
uint8 count;
uint8 test[32];
uint8 parity;
uint8 stopbit;
uint8 mode;
uint8 workMode;
}SYS_CONFIG;
SYS_CONFIG sys_config;
init:
//--------------------------------------------------------------
int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
// 如果该段内存未曾写入过数据, 直接读,会返回 NV_OPER_FAILED ,
// 我们利用这个特点作为第一次烧录后的运行, 从而设置参数的出厂设置
if(NV_OPER_FAILED == ret8)
{
// 把数据结构保存到flash
osal_memset(&sys_config, 0, sizeof(sys_config));
osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config);
osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
}
//--------------------------------------------------------------