使用情況
芯片:SMT32F429
操作系統:RTT 5.0.0
文件系統:littlefs + romfs
flashdb:kvdb + 文件模式 使用
使用場景
分配5個扇區情況
創建一個線程,1秒寫入一次當前時間戳至kvdb數據庫中
發現如果分配五個扇區,前四個扇區都可以正常讀寫。
當五個扇區都寫滿的時候,需要搬運數據到第0扇區去。
日志如下,沒有空扇區了。
The remain empty sector is 1, GC threshold is 1.
這個日志已出現,系統就會卡死,看門狗復位
嘗試debug調試,總是調到沒有使用的函數里面,函數地址0x00000xx開頭。
解決方法
經過不斷嘗試,ps打印當前線程狀態時,發現時間戳保存線程的最大使用率高達81%.一般來說都要控制在75%左右合適。
分析是不是應該堆棧不夠導致系統卡死
將該線程從2048改為4096后,不會出現卡死問題了。線程的最大使用率變為51%
分析
flshdb在扇區都滿的情況下,會進行Collect操作。這個操作是在當前線程完成的,會增加占用率。
然而這個運行操作并不是會頻繁出現的,所以很難判斷到是堆棧不夠導致的問題。
建議
能否增加一個異步模式來專門執行gc與Collect操作?
就像ulog的異步線程的方式那樣。
寫入數據庫并不要求實時性,只需要確保數據的準確就好了。
異步方式需要一個緩沖區,緩沖區滿了才能傳入數據,可能導致緩沖區未滿時掉電,導致數據缺失了一部分。
但是這個情況,可以添加一個函數,立刻刷新緩沖區。然后給用戶使用。 用戶自己實現掉電保存與硬件。所以可以增加一個異步線程的選項,提供用戶使用。看用戶是選擇實時,還是效率。
-
看門狗
+關注
關注
10文章
566瀏覽量
70951 -
STM32F429
+關注
關注
0文章
40瀏覽量
10794 -
RTThread
+關注
關注
8文章
132瀏覽量
41002
發布評論請先 登錄
相關推薦
外部中斷誤觸發的原因分析和解決方法
![外部中斷誤<b class='flag-5'>觸發</b>的原因分析和<b class='flag-5'>解決方法</b>](https://file1.elecfans.com/web2/M00/B2/66/wKgZomVfFo2AITbPAABvg_kBiSg988.jpg)
一種優雅解決MySQL驅動中虛引用導致GC耗時較長問題的方法
接地網阻值偏大的原因及解決方法
CC2640的SPI使用導致程序卡死?
請問為什么AM3352 SD卡 mmcblk0: retrying using single block read導致系統卡死?
EasyFlash 1CR墨盒的資料分享
RK3399系統經常卡死的問題及其解決方法
flashDB / Easyflash觸發GC導致系統卡死的解決方法分享
ISP串口下載時卡死的解決方法
導致開關電源嘯叫的六種情況及解決方法
![<b class='flag-5'>導致</b>開關電源嘯叫的六種情況及<b class='flag-5'>解決方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Systick_Handler B.卡死處理方法
![Systick_Handler B.<b class='flag-5'>卡死</b>處理<b class='flag-5'>方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
舵機使用外部電源供電導致舵機不轉或者向一個方向轉動直到卡死的原因和解決方法
![舵機使用外部電源供電<b class='flag-5'>導致</b>舵機不轉或者向一個方向轉動直到<b class='flag-5'>卡死</b>的原因和<b class='flag-5'>解決方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論