應用場景:
設備跑的是Linux系統,與PC上位機進行通信,上位機可以給Linux發送設備配置信息,Linux將配置信息寫入文件中以備設備斷電重啟時使用。
bug現象:
設備正常運行,設備配置信息為A,此時通過上位機給給Linux發送行的設備信息B,並進入Linux系統查看,設備配置信息已被正確寫入文件中, 然后給設備斷電重啟,待設備運行穩定發現設備配置信息仍為A。
bug分析:
1. 可以確定的是上位機向Linux系統發送設備配置信息的信道連接是沒有問題的;
2. Linux進行設備信息保存的過程是正常的。
解決過程:
1. 在Linux將設備配置信息寫入文件后,再重新讀出,該方法不能解決問題,上位機發送完配置信息后立即給設備斷電重啟,依然會出現上述現象;
2. 在Linux將設備信息寫入文件后,調用fflush(),手動沖刷緩存,該解決方法和 1 一樣,不能完全解決問題;
3. 在Linux將設備信息寫入文件后,system("sync"); 強制同步緩存和硬盤,問題得到解決。
綜上,應該是fwrite()只是將數據寫在了緩存中,而沒有同步到硬盤(SD卡)中去,Linux系統應該也有緩存同步機制,但我還不太清楚具體是怎樣的,應為在上面的解決過程中,如果在上位機發送完配置信息后,等待 2 分鍾, 數據還是可以保存的,但是設備在實際使用中是不一定能等這么久的時間的所以最終使用的方法3的解決方案。關於Linux系統緩存的同步機制后期再研究了。