Firefly开源社区

标题: 谁来说说NVDS? [打印本页]

作者: wyq165    时间: 2015-6-4 16:33
标题: 谁来说说NVDS?
NVDS跟读写flash有什么不同?还有成功或失败反馈的?
作者: xiaolong_ba    时间: 2015-6-4 17:00
NVDS就是Flash的0x00000~0x01000这4KB的位置,有NVDS的API读取NVDS里的每一项内容,在nvds.h可以看到相关函数
作者: wyq165    时间: 2015-6-4 17:53
xiaolong_ba 发表于 2015-6-4 17:00
NVDS就是Flash的0x00000~0x01000这4KB的位置,有NVDS的API读取NVDS里的每一项内容,在nvds.h可以看到相关函 ...

那需要添加新的项怎么搞?
我有看到那边有个ID和长度的枚取,是直接该哪个枚取,添加新项?
作者: xiaolong_ba    时间: 2015-6-5 09:26
nvds_put();就是可以增加TAG到NVDS的啊,你可以具体看下这个函数,在NVDS_LEN枚举和NVDS_TA枚举增加相应的值就OK哈
作者: wyq165    时间: 2015-6-5 14:16
xiaolong_ba 发表于 2015-6-5 09:26
nvds_put();就是可以增加TAG到NVDS的啊,你可以具体看下这个函数,在NVDS_LEN枚举和NVDS_TA枚举增加相应的 ...

这个我倒知道怎么改,SDK资料上有个软件也可以设置。
作者: thong    时间: 2015-6-5 16:14
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);
       
        }
作者: xiaolong_ba    时间: 2015-6-5 16:29
thong 发表于 2015-6-5 16:14
你知道nvds的方法怎样读写flash吗,下面这样好像写不进去呢?
uint8_t test1 = 0xf1,test2;
       

你这样不对啊,你要先在枚举那里增加你要加的TAG名和TAG的长度,再用nvds_put函数加进去,NVDS_END_MARKER_TAG这个枚举值是TAG最后标记的标记,你不能拿来用的
作者: thong    时间: 2015-6-5 16:53
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不进去呀,为啥呢,还请赐教?
作者: xiaolong_ba    时间: 2015-6-7 22:50
thong 发表于 2015-6-5 16:53
NVDS_TAG_FLASH_WR                   = 0x14,
NVDS_LEN_FLASH_WR                     = 1,
uint8_t ...

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

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

应该是返回了这个NVDS_NO_TEMP_BUF_AVAILABLE,没有清除缓冲区。
作者: FireBLE_blue    时间: 2015-6-8 10:00
本帖最后由 FireBLE_blue 于 2015-6-8 10:51 编辑

方法一:
1->在“usr_config.h ”头文件打开宏定义
  1. #define CFG_NVDS_WRITE
复制代码
2->在enum NVDS_TAG 枚举中增加TAG ,如下所示:
  1. NVDS_TAG_WR_TESET         = 0x14,
复制代码
3->在enum NVDS_LEN 枚举中增加TAG的长度,如下所示:
  1. NVDS_LEN_WR_TESET         = 5,//这里看要求,并不是一定要这个数
复制代码
4->测试代码如下:
  1. uint8_t* test1="Helon",test2[5]={0};
  2. nvds_tag_len_t length=strlen(test1);
  3. if (NVDS_OK==nvds_put(NVDS_TAG_WR_TESET,length,test1))
  4. {
  5.         nvds_get(NVDS_TAG_WR_TESET,&length,test2);
  6. }
复制代码
5->测试结果:


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




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

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

你看FireBLE_blue的回答,他那样是可行的;
作者: 安安    时间: 2015-6-8 11:02
xiaolong_ba 发表于 2015-6-8 09:26
应该是返回了这个NVDS_NO_TEMP_BUF_AVAILABLE,没有清除缓冲区。

请严格按照FireBLE_blue的方法来做,TAG的定义和LEN的定义最好符合规范,要在NVDS.h中定义。
作者: thong    时间: 2015-6-8 11:25
xiaolong_ba 发表于 2015-6-8 10:17
你看FireBLE_blue的回答,他那样是可行的;

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

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

嗯 ,还得谢谢大家的帮忙哦
作者: 安安    时间: 2015-6-8 16:10
thong 发表于 2015-6-8 15:31
嗯 ,还得谢谢大家的帮忙哦

已经解决了吗?解决了就好。
作者: thong    时间: 2015-6-9 10:08
安安 发表于 2015-6-8 16:10
已经解决了吗?解决了就好。

嗯 是的,3Q
作者: Asia003    时间: 2015-10-22 13:37
安安 发表于 2015-6-8 11:02
请严格按照FireBLE_blue的方法来做,TAG的定义和LEN的定义最好符合规范,要在NVDS.h中定义。

照方法一做了以后,找不到蓝牙设备了?
作者: 安安    时间: 2015-10-22 14:54
Asia003 发表于 2015-10-22 13:37
照方法一做了以后,找不到蓝牙设备了?

估计你是改动了广播部分的代码引起的吧?你确定和NVDS的读写有关系吗?




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1