寫了很久的cc2530**,終於要用到斷電儲存功能了。比如,我希望斷電之後,重新上電能把我上次採集的溫度資訊儲存下來。
其實很簡單。
第一:不要預定義什麼,你只需要看看你的**裡有沒有用到 osal_nv_init(null)來進行nv初始化就好了。
查詢位置: zmain.c檔案中的main()函式,如果有就可以進行第二步了。實在不是很確定的,可以iar工具裡debug看看。
第二:寫初始化**
osal**裡說的很清楚,在使用osal_nv_read和osal_nv_write之前必須呼叫osal_nv_item_init進行初始化。
從cc2530的中可以看到自定義的nv 編號範圍是 0x0401 – 0x0fff。 **
#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的內容
其實第一次讀取時,讀到的內容必然是無效的,因此要結合初始化的結果來判斷資訊是否有效。
zclairconditionfuns airconditionstatusnv;
readnvstatus=osal_nv_read(zd_nv_temp_id,0, sizeof(zclairconditionfuns),&airconditionstatusnv );
if(readnvstatus==success&&initnvstatus==success)
也就是說初次燒錄**時不會處理讀到的資訊,因為第一次讀取的本來就是無效的,因為還沒有寫入過。當然,如果你在讀取之前已經寫過了,那就能讀出有效資訊。
第三: 向nv寫內容
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...