使用情況
芯片:SMT32F429
操作系統(tǒng):RTT 5.0.0
文件系統(tǒng):littlefs + romfs
flashdb:kvdb + 文件模式 使用
使用場景
分配5個扇區(qū)情況
創(chuàng)建一個線程,1秒寫入一次當前時間戳至kvdb數(shù)據(jù)庫中
發(fā)現(xiàn)如果分配五個扇區(qū),前四個扇區(qū)都可以正常讀寫。
當五個扇區(qū)都寫滿的時候,需要搬運數(shù)據(jù)到第0扇區(qū)去。
日志如下,沒有空扇區(qū)了。
The remain empty sector is 1, GC threshold is 1.
這個日志已出現(xiàn),系統(tǒng)就會卡死,看門狗復位
嘗試debug調(diào)試,總是調(diào)到?jīng)]有使用的函數(shù)里面,函數(shù)地址0x00000xx開頭。
解決方法
經(jīng)過不斷嘗試,ps打印當前線程狀態(tài)時,發(fā)現(xiàn)時間戳保存線程的最大使用率高達81%.一般來說都要控制在75%左右合適。
分析是不是應(yīng)該堆棧不夠?qū)е孪到y(tǒng)卡死
將該線程從2048改為4096后,不會出現(xiàn)卡死問題了。線程的最大使用率變?yōu)?1%
分析
flshdb在扇區(qū)都滿的情況下,會進行Collect操作。這個操作是在當前線程完成的,會增加占用率。
然而這個運行操作并不是會頻繁出現(xiàn)的,所以很難判斷到是堆棧不夠?qū)е碌膯栴}。
建議
能否增加一個異步模式來專門執(zhí)行g(shù)c與Collect操作?
就像ulog的異步線程的方式那樣。
寫入數(shù)據(jù)庫并不要求實時性,只需要確保數(shù)據(jù)的準確就好了。
異步方式需要一個緩沖區(qū),緩沖區(qū)滿了才能傳入數(shù)據(jù),可能導致緩沖區(qū)未滿時掉電,導致數(shù)據(jù)缺失了一部分。
但是這個情況,可以添加一個函數(shù),立刻刷新緩沖區(qū)。然后給用戶使用。 用戶自己實現(xiàn)掉電保存與硬件。所以可以增加一個異步線程的選項,提供用戶使用。看用戶是選擇實時,還是效率。
-
看門狗
+關(guān)注
關(guān)注
10文章
559瀏覽量
70746 -
STM32F429
+關(guān)注
關(guān)注
0文章
40瀏覽量
10648 -
RTThread
+關(guān)注
關(guān)注
8文章
132瀏覽量
40811
發(fā)布評論請先 登錄
相關(guān)推薦
評論