在一些應用場景下,需要在微控制器復位後儲存一些資料 。在實現這一目標之前,需要對微控制器的啟動過程有乙個粗略的了解。
1. 微控制器啟動方式
1.1 冷啟動
微控制器的冷啟動指的是微控制器的上電啟動,即微控制器在掉電狀態下的上電啟動。此時微控制器ram中的資料是隨機的,可能是0x00或是0xff,具體與晶元特性有關。
1.2熱啟動
微控制器的熱啟動指的是微控制器在上電狀態下,由於看門狗復位、外部復位電路復位等硬體復位,或是軟體復位等原因導致的微控制器重新啟動。熱啟動時,ram區的資料是可以被保留的。
2. 資料儲存方式
2.1 儲存到非易失儲存區域中
如果需要在冷啟動時獲取前次儲存的資料,那麼這個資料只能被儲存在eeprom、flash等非易失儲存介質中。如果需要儲存在內部flash中,需要對flash區域的分配有乙個充分的了解,避免覆蓋掉其他內容。
2.2 儲存在ram中
由於寫flash或是eeprom時存在的讀寫速度慢、扇區讀寫壽命有限等問題,在僅僅需要在熱啟動場景下儲存的資料,就可以儲存在ram中。
需要將資料儲存在ram中時,需要保證啟動時ram區不被重新初始化。如果使用keil,keil會為每款cpu提供乙個startup.s的彙編啟動**,使用者可以修改其啟動過程或是通過如下設定,使指定ram區域不被初始化:
指定某一ram區no init後,還需要利用__attribute__將要儲存的變數指定儲存在這一區域:
static uint32_t m_magic_code __attribute__( ( at( 0x20003ff0), zero_init) );
這時候檢視.map可以看到以下字樣:
下次上電,直接讀取該值即可。
這裡需要注意的是,凡是儲存在no init區域的資料,需要保證其在使用前都是確認過其有效性的。
將資料儲存在本地
localstorage localstorage.setitem id value 獲取用localstorage.getitem id 特點 資料一直保留在本地,除非手動刪除 sessionstorage sessionstorage.setitem id value 獲取用sessionsto...
將Session儲存在SqlServer中
首先需要安裝用於存放會話的資料庫,當然,ms在.net framework中已經提供了現成的工具。在類似於 c windows microsoft.net framework v2.0.50727文 件夾下可以找到installsqlstate.sql檔案,這其實是乙個文字檔案,裡面存放著用於建立 ...
將Session儲存在SqlServer中
首先需要安裝用於存放會話的資料庫,當然,ms在.net framework中已經提供了現成的工具。在類似於 c windows microsoft.net framework v2.0.50727資料夾下可以找到installsqlstate.sql 檔案,這其實是乙個文字檔案,裡面存放著用於建立 ...