Part Number:LP-CC2652RB
以 simple_peripheral_onchip_oad 为例,我在其 syscfg 文件中发现其分别定义了两个 NVS,设置分别如下图:
通过搜索可以知道,OAD 功能只用了 CONFIG_NVSINTERNAL1,即地址从 0x0–0x33FFF;而定义的 CONFIG_NVSINTERNAL 并没有使用,其地址从 0x34000 开始。
我想请教一下:
1. 是否我们的一些用户数据可以直接存储在 CONFIG_NVSINTERNAL 的空间内?
2. 我在加了 NVS.h 头文件,并做了如下代码初始化后,为什么 NVS_open() 总是执行失败呢?
( 我还在不支持 OAD 的 simple_peripheral 例程里也试了这个代码,也是 NVS_open() 返回 NULL。但这个初始化过程我是从 nvsinternal 例程里抄过来的呀)
NVS_Params nvsParams_pkg; NVS_Handle nvsHandle_pkg; NVS_Attrs nvsAttrs_pkg; NVS_init(); NVS_Params_init(&nvsParams_pkg); nvsHandle_pkg = NVS_open(CONFIG_NVSINTERNAL, &nvsParams_pkg); if(nvsHandle_pkg == NULL) {Display_printf(dispHandle, 0, 0, "NVS_pkg open failed");while(1); } else {Display_printf(dispHandle, 0, 0, "NVS_pkg open OK"); }
谢谢大家!
Kevin Qiu1:
1.可以
2.你debug看一下卡在哪里,另外串口打印什么信息
,
junde deng:
谢谢你!
现在 debug 就是停在了 while(1); 循环里。(从log信息可以看出,display_printf 的输出也还是按指定行数输出,而不是按执行顺序输出)
,
YiKai Chen:
你這個是NVS_open失敗了。列印的問題,用個全域變數指定行數,每次用完加一不就解決了
,
junde deng:
问题已经解决:
我用 CONFIG_NVSINTERNAL 会一直失败,如果删除 CONFIG_NVSINTERNAL 好像也会出问题,但是又找不到哪里用到了这个空间。。。
我的解决方案是新建两个 NVS 区域,如下:
我试过将 CONFIG_NVSINTERNAL 的空间减小到 0x34000–0x36000,然后在其后再加一个空间,编译可以通过并能正常执行 NVS_open()。
问题虽然解决,但是原因还不是太清楚。
还有另外的疑问:
1. onchip OAD 时需要下载 persistent app,而这个 app 的下载地址就是 0x38000,不知道这个是不是表示,我在应用程序里的 NVS 设置不能超过这个指?
2. CONFIG_NVSINTERNAL 究竟是干嘛的?最小空间有什么决定?其起始地址只能是 0x34000 吗,是哪里决定的呢?
3. CONFIG_NVSINTERNAL1 的最小空间又什么决定,从哪里可以确定其最小空间?
希望知道答案的朋友能够解答一下我的疑问,谢谢大家!