偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

鴻蒙Hi3861 NV操作——如何保存數(shù)據(jù)到開(kāi)發(fā)板,斷電不丟失

系統(tǒng)
實(shí)際產(chǎn)品開(kāi)發(fā)過(guò)程中,我們肯定需要保存一些數(shù)據(jù),并且掉電不丟失。例如很多人在使用我之前寫(xiě)的一篇WiFi配網(wǎng)功能后,都會(huì)遇到一個(gè)問(wèn)題:我配置了WiFi賬戶密碼,但是下次我又得重新配網(wǎng),能不能把WiFi賬戶密碼保存起來(lái)?

[[350817]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz

實(shí)際產(chǎn)品開(kāi)發(fā)過(guò)程中,我們肯定需要保存一些數(shù)據(jù),并且掉電不丟失。例如很多人在使用我之前寫(xiě)的一篇WiFi配網(wǎng)功能后,都會(huì)遇到一個(gè)問(wèn)題:我配置了WiFi賬戶密碼,但是下次我又得重新配網(wǎng),能不能把WiFi賬戶密碼保存起來(lái)?

好,接下來(lái)我們來(lái)實(shí)現(xiàn)這個(gè)功能:保存數(shù)據(jù)到開(kāi)發(fā)板,斷電不丟失。

有兩種方式:

1、使用KV系統(tǒng)——最簡(jiǎn)單,推薦使用

關(guān)于如何保存數(shù)據(jù)的,可以直接使用 kv系統(tǒng)更加簡(jiǎn)單方便,不必參考本文的 nv操作,本文nv操作僅供大家參考。

kv系統(tǒng)可以保存數(shù)據(jù)到flash,只需要簡(jiǎn)單的兩個(gè)函數(shù)即可:

//刪除kv

void DeleteKVCache(const char* key);

//增加kv

void AddKVCache(const char* key, const char* value, boolean isNew);

//獲取kv值

int GetValueByCache(const char* key, char* value, unsigned int maxLen);

//清除kv

int ClearKVCacheInner(void);

例如:

//把ssid寫(xiě)入到kv中

AddKVCache("ssid", ssid, TRUE);

//讀取出來(lái)kv

GetValueByCache("ssid",ssid,sizeof(ssid));

可以看到更加簡(jiǎn)單高效~~推薦大家使用

2、NV系統(tǒng)——僅hi3861支持

首先我們要使用到 hi3861 的nv操作,它支持我們自定義一些數(shù)據(jù)保存到工廠參數(shù)分區(qū),其實(shí)就是寫(xiě)入到hi3861的flash中。

不過(guò)這個(gè)功能使用挺復(fù)雜的,我們以保存wifi賬戶密碼為例。

1、修改 mss_nvi_db.xml 文件

打開(kāi)vendor\hisi\hi3861\hi3861\tools\nvtool\xml_file\mss_nvi_db.xml 文件,在 Factory 中增加我們的參數(shù):ID為0x0B 。 

 

截圖的內(nèi)容是這個(gè):

  1. <NV ID="0x0B" NAME="INIT_CONFIG_SSID_MY" PARAM_NAME="wal_cfg_ssid_my" PARAM_VALUE="{[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}" CATEGORY="FTM" DEV="CCO-STA-NDM" DESCRIPTION="" /> 

2、修改 nv_factory_struct_def.txt 文件 增加 結(jié)構(gòu)體

修改 vendor\hisi\hi3861\hi3861\tools\nvtool\h_file\nv\nv_factory_struct_def.txt,增加結(jié)構(gòu)體: 

  1. typedef struct { 
  2.  
  3.     hi_u8 ssid[50]; 
  4.  
  5.     hi_u8 passwd[50]; 
  6.  
  7. } wal_cfg_ssid_my; 

3、編寫(xiě)代碼,讀取寫(xiě)入數(shù)據(jù)

通常來(lái)說(shuō),需要先執(zhí)行一次 hi_nv_init(0xA000, 0x2000, 0x1000); 進(jìn)行初始化,但是由于系統(tǒng)啟動(dòng)的時(shí)候已經(jīng)初始化過(guò)了,所以我們不需要重復(fù)初始化。 

  1. //寫(xiě)入到工廠區(qū) 
  2.  
  3.     /* NV值寫(xiě)入 */ 
  4.  
  5.     wal_cfg_ssid_my nv; 
  6.  
  7.     memset(&nv, 0, sizeof(wal_cfg_ssid_my)); 
  8.  
  9.     memcpy_s(&nv.ssid[0], sizeof(wal_cfg_ssid_my), ssid, ssid_len); 
  10.  
  11.     memcpy_s(&nv.passwd[0], sizeof(wal_cfg_ssid_my), passwd, passwd_len); 
  12.  
  13.  
  14.  
  15.  
  16.     ret = hi_factory_nv_write(NV_ID, &nv, sizeof(wal_cfg_ssid_my), 0); 
  17.  
  18.     if (ret != HISI_OK) { 
  19.  
  20.     printf("%x\n", ret); 
  21.  
  22.     } 
  23.  
  24.     /* 再次讀取寫(xiě)入的NV值 */ 
  25.  
  26.     ret = hi_factory_nv_read(NV_ID, &nv, sizeof(wal_cfg_ssid_my), 0); 
  27.  
  28.     if (ret != HISI_OK) { 
  29.  
  30.     printf("%x\n", ret); 
  31.  
  32.     } 
  33.  
  34.     printf("nv read : %d,  ssid  :[%s]  psswd [%s]\n",ret, nv.ssid, nv.passwd); 

附件我提供了一個(gè)wifi配網(wǎng)的升級(jí)版功能的源碼,支持保存wifi賬號(hào)密碼。

完成以上操作后,我們就可以發(fā)現(xiàn)wifi賬戶密碼可以寫(xiě)入到nv中了,可以永久保存數(shù)據(jù)了。查看開(kāi)機(jī)打印:  

 

可以看到開(kāi)機(jī)后讀取到ssid 和密碼正確,并且成功連接到wifi熱點(diǎn)了。

我們?cè)賮?lái)看這個(gè)nv的一些內(nèi)容吧:

mss_nvi_db.xml 文件記錄了所有系統(tǒng)參數(shù)的默認(rèn)值,而且這個(gè)文件其實(shí)還分組的: 

 

可以看到分為 Factory 和 Modem。

NV模塊用于管理系統(tǒng)關(guān)鍵配置信息。 NV存儲(chǔ)于Flash上,分為以下2個(gè)區(qū):

● 工廠區(qū) Factory:僅在工廠時(shí)使用。

● 非工廠區(qū) Modem :分為以下2個(gè)區(qū):

– Keep區(qū): NV項(xiàng)在升級(jí)后保留原值

– Modem區(qū): NV項(xiàng)在升級(jí)后被新版本值替換。  

 

關(guān)于

  1. <GROUP NAME="Factory" ID="0x3" FEATURE="1<<0,1<<5" USEDMODE="0" PARAM_DEF_FILE="../nv/nv_factory_struct_def.txt"

每一項(xiàng)的說(shuō)明如下:

 

關(guān)于

  1. <NV ID="0x0B" NAME="INIT_CONFIG_SSID_MY" PARAM_NAME="wal_cfg_ssid_my" PARAM_VALUE="{[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}" CATEGORY="FTM" DEV="CCO-STA-NDM" DESCRIPTION="" /> 

的每一項(xiàng)說(shuō)明如下: 

 

另外需要注意的是工廠區(qū)的讀寫(xiě)操作跟非工廠區(qū)的讀寫(xiě)操作的API不同。  

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-11-06 10:15:16

HiBurn

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-11-18 11:56:06

鴻蒙Hi3861

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

2020-12-08 12:36:41

Hi3861 ADC驅(qū)動(dòng)開(kāi)發(fā)

2020-10-27 10:08:19

Hi3861ADC驅(qū)動(dòng)

2020-12-17 10:02:16

鴻蒙Hi3861開(kāi)發(fā)板

2020-10-30 17:12:05

Hi3861

2020-12-15 11:57:49

Hi3861 HarmonyOS開(kāi)發(fā)板

2020-12-09 09:44:29

Hi3861硬件介紹鴻蒙開(kāi)發(fā)板

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-10-30 17:42:36

鴻蒙 OS Hi386

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2020-10-30 09:48:03

Hi3861開(kāi)發(fā)板get請(qǐng)求

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用

2020-10-29 09:53:06

Hi3861硬件開(kāi)發(fā)板

2020-12-11 12:45:04

鴻蒙Hi3861游戲

2020-12-02 11:48:05

TFTP

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2022-01-05 20:27:45

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)