谁来说说NVDS?

NVDS跟读写flash有什么不同?还有成功或失败反馈的?

NVDS就是Flash的0x00000~0x01000这4KB的位置,有NVDS的API读取NVDS里的每一项内容,在nvds.h可以看到相关函数

xiaolong_ba 发表于 2015-6-4 17:00
NVDS就是Flash的0x00000~0x01000这4KB的位置,有NVDS的API读取NVDS里的每一项内容,在nvds.h可以看到相关函 …

那需要添加新的项怎么搞?
我有看到那边有个ID和长度的枚取,是直接该哪个枚取,添加新项?

nvds_put();就是可以增加TAG到NVDS的啊,你可以具体看下这个函数,在NVDS_LEN枚举和NVDS_TA枚举增加相应的值就OK哈

xiaolong_ba 发表于 2015-6-5 09:26
nvds_put();就是可以增加TAG到NVDS的啊,你可以具体看下这个函数,在NVDS_LEN枚举和NVDS_TA枚举增加相应的 …

这个我倒知道怎么改,SDK资料上有个软件也可以设置。

wyq165 发表于 2015-6-5 14:16
这个我倒知道怎么改,SDK资料上有个软件也可以设置。

你知道nvds的方法怎样读写flash吗,下面这样好像写不进去呢?
uint8_t test1 = 0xf1,test2;

nvds_tag_len_t len = 1;

if(retu==nvds_put(NVDS_END_MARKER_TAG,1,&test1))
{

  nvds_get(NVDS_END_MARKER_TAG,&len,&test2);

}

thong 发表于 2015-6-5 16:14
你知道nvds的方法怎样读写flash吗,下面这样好像写不进去呢?
uint8_t test1 = 0xf1,test2;

你这样不对啊,你要先在枚举那里增加你要加的TAG名和TAG的长度,再用nvds_put函数加进去,NVDS_END_MARKER_TAG这个枚举值是TAG最后标记的标记,你不能拿来用的

xiaolong_ba 发表于 2015-6-5 16:29
你这样不对啊,你要先在枚举那里增加你要加的TAG名和TAG的长度,再用nvds_put函数加进去,NVDS_END_MARKE …

NVDS_TAG_FLASH_WR = 0x14,
NVDS_LEN_FLASH_WR = 1,
uint8_t test1 = 0xf1,test2;

nvds_tag_len_t len = 1;

if(retu==nvds_put(NVDS_TAG_FLASH_WR,1,&test1))
{

  nvds_get(NVDS_TAG_FLASH_WR,&len,&test2);

}

还是put不进去呀,为啥呢,还请赐教?

thong 发表于 2015-6-5 16:53
NVDS_TAG_FLASH_WR = 0x14,
NVDS_LEN_FLASH_WR = 1,
uint8_t …

你这样写应该是没有问题,你Put的时候是不是返回0啊?

xiaolong_ba 发表于 2015-6-7 22:50
你这样写应该是没有问题,你Put的时候是不是返回0啊?

返回的是0x07呢,不知道啥问题

thong 发表于 2015-6-8 09:21
返回的是0x07呢,不知道啥问题

应该是返回了这个NVDS_NO_TEMP_BUF_AVAILABLE,没有清除缓冲区。

本帖最后由 FireBLE_blue 于 2015-6-8 10:51 编辑

方法一:
1->在“usr_config.h ”头文件打开宏定义

#define CFG_NVDS_WRITE

2->在enum NVDS_TAG 枚举中增加TAG ,如下所示:

NVDS_TAG_WR_TESET         = 0x14,

3->在enum NVDS_LEN 枚举中增加TAG的长度,如下所示:

NVDS_LEN_WR_TESET         = 5,//这里看要求,并不是一定要这个数

4->测试代码如下:

uint8_t* test1="Helon",test2[5]={0};
nvds_tag_len_t length=strlen(test1);
if (NVDS_OK==nvds_put(NVDS_TAG_WR_TESET,length,test1))
{
        nvds_get(NVDS_TAG_WR_TESET,&length,test2);
}

5->测试结果:
Catch(06-08-09-58-14).jpg

方法二:
使用QBlue里的Quintic NVDS Configurator软件


xiaolong_ba 发表于 2015-6-8 09:26
应该是返回了这个NVDS_NO_TEMP_BUF_AVAILABLE,没有清除缓冲区。

那我应该怎样处理呢,没看到清缓冲区的API呀?

thong 发表于 2015-6-8 10:01
那我应该怎样处理呢,没看到清缓冲区的API呀?

你看FireBLE_blue的回答,他那样是可行的;

xiaolong_ba 发表于 2015-6-8 09:26
应该是返回了这个NVDS_NO_TEMP_BUF_AVAILABLE,没有清除缓冲区。

请严格按照FireBLE_blue的方法来做,TAG的定义和LEN的定义最好符合规范,要在NVDS.h中定义。

xiaolong_ba 发表于 2015-6-8 10:17
你看FireBLE_blue的回答,他那样是可行的;

我换了个板子串口打印出来是没问题的,之前测试的那个板子NVDS好像为空

thong 发表于 2015-6-8 11:25
我换了个板子串口打印出来是没问题的,之前测试的那个板子NVDS好像为空

NVDS空的,难怪会报没有清除缓冲区错误。解决了就好:lol

xiaolong_ba 发表于 2015-6-8 11:35
NVDS空的,难怪会报没有清除缓冲区错误。解决了就好

嗯 ,还得谢谢大家的帮忙哦

thong 发表于 2015-6-8 15:31
嗯 ,还得谢谢大家的帮忙哦

已经解决了吗?解决了就好。

安安 发表于 2015-6-8 16:10
已经解决了吗?解决了就好。

嗯 是的,3Q