Air780E/Air780EP/Air780EQ/Air201模塊遇到內存死機如何分析
簡介
本文檔適用于合宙Air780E、Air780EP、Air780EQ、Air201
關聯文檔和使用工具:
移芯平臺模塊出現死機問題分析
EPAT抓取底層日志
從Ramdump里分析內存泄漏問題
對于遇到內存不足死機的問題,可以從ramdump里找出哪些函數在消耗ram。
進入trace32后,在自動彈出下發圖片的窗口里能找到哪個函數在哪個task里用了多少ram沒有歸還,如果遇到哪個API大量申請了ram沒有歸還,基本上就是問題點了
為了查找方便,在trace_node選擇某個數據,框里面右鍵 -> 點擊format
上圖里看到0x00868909 這個API在消耗大量的ram,從map文件,或者從trace_32工具菜單 view -> symbols -> browes 里搜索,Ctrl+F,或者Cov - > list functions,就能找到函數名稱。
這樣查找問題解答方向上 就相對明確了。
從Ramdump里分析棧溢出
需要檢查下trace32里有沒有freertos文件夾,如果沒有可以在這里下載放到根目錄freertos
一般來說,棧溢出會有斷言的情況,但是也有代碼申請了一大塊棧空間,導致棧底的ram沒有被改變,但是實際上代碼已經操作了棧外空間,且freertos不會報錯,燃石在trace32里能分析出來。
打開trace32 -> freertos -> stack Coverage -> List Stacks
可以看到ram使用情況,注意這里認為棧空間只有1KB,但是實際上可能是遠超的,不過沒關系,如果max里是0%,說明還有很多棧空間,不用去管
Tmr Svc這個task居然用到了93%
右鍵點擊紅框,在彈出菜單里選擇display memory->dump
距離溢出只有不到70字節,如果用戶代碼里有類似uint8_t temp[71],那么很容易就操作了棧外的ram,死機就很正常了
-
內存
+關注
關注
8文章
3019瀏覽量
74003 -
死機
+關注
關注
0文章
17瀏覽量
8597 -
合宙通信
+關注
關注
0文章
147瀏覽量
1737
發布評論請先 登錄
相關推薦
評論