ZStack CC2530 斷電儲存 NV 方法

2021-08-04 01:23:37 字數 1760 閱讀 4036

寫了很久的cc2530**,終於要用到斷電儲存功能了。比如,我希望斷電之後,重新上電能把我上次採集的溫度資訊儲存下來。

其實很簡單。

第一:不要預定義什麼,你只需要看看你的**裡有沒有用到  osal_nv_init(null)來進行nv初始化就好了。

查詢位置: zmain.c檔案中的main()函式,如果有就可以進行第二步了。實在不是很確定的,可以iar工具裡debug看看。

第二:寫初始化**

osal**裡說的很清楚,在使用osal_nv_readosal_nv_write之前必須呼叫osal_nv_item_init進行初始化。

從cc2530的中可以看到自定義的nv 編號範圍是 0x0401 – 0x0fff。

**[objc]view plain

copy

print?

#define zd_nv_temp_id 0x0404

uint8

initnvstatus=osal_nv_item_init(zd_nv_temp_id,

sizeof

(zclairconditionfuns),

null

);  

其中 zclairconditionfuns為乙個struct.

initnvstatus的輸出值見下表,這個非常關鍵:值含義

success

表示成功,並且該id已經存在

nv_item_uninit

表示成功,但id之前不存在,即第一次初始化。

nv_oper_failed

初始化失敗

第二 : 讀取nv的內容

其實第一次讀取時,讀到的內容必然是無效的,因此要結合初始化的結果來判斷資訊是否有效。

[objc]view plain

copy

print?

zclairconditionfuns  airconditionstatusnv;  

[objc]view plain

copy

print?

readnvstatus=osal_nv_read(zd_nv_temp_id,0, 

sizeof

(zclairconditionfuns),&airconditionstatusnv );  

if(readnvstatus==success&&initnvstatus==success)  

也就是說初次燒錄**時不會處理讀到的資訊,因為第一次讀取的本來就是無效的,因為還沒有寫入過。當然,如果你在讀取之前已經寫過了,那就能讀出有效資訊。

第三: 向nv寫內容

[objc]view plain

copy

print?

writenvstatus=osal_nv_write(zd_nv_temp_id,0,

sizeof

(zclairconditionfuns),&airconditionstatus);   

注意事項:

1.  nv操作不能過於頻繁,耗時耗能量。

2. 每次利用iar燒錄時就是重新擦除了,因此如果希望看自己的**是否有效,只能斷電重啟通過其他方式驗證,別指望通過debug方式驗證**的有效性。

2 5 3 請求鉤子

有時在處理請求之前或之後執行 會很有用。例如,在請求開始時,我們可能需要建立資料庫連線或者認證發起請求的使用者。為了避免在每個檢視函式中都使用重複的 flask 提供了註冊通用函式的功能,註冊的函式可在請求被分發到檢視函式之前或之後 呼叫。請求鉤子使用修飾器實現。flask 支援以下 4 種鉤子。b...

ZStack CC2530 斷電儲存 NV 方法

寫了很久的cc2530 終於要用到斷電儲存功能了。比如,我希望斷電之後,重新上電能把我上次採集的溫度資訊儲存下來。其實很簡單。第一 不要預定義什麼,你只需要看看你的 裡有沒有用到 osal nv init null 來進行nv初始化就好了。查詢位置 zmain.c檔案中的main 函式,如果有就可以...

提高專案25 3選擇排序

任務和 體驗選擇排序 改造 1 的程式,將bubble sort 改為select sort 排序演算法由氣泡排序換作為選擇排序,排序結果由降序變為公升序,完成類似的任務。檔名 main.c 完成日期 2016.7.7 問題描述 體驗選擇排序 改造 1 的程式,將bubble sort 改為sele...