RT_Thread系統死機日志定位
- 一、RT_Thread系統死機日志定位
- 二、Cortex-M3 / M4架構知識
- 2.1 Cortex-M3 / M4架構概述
- 2.2 寄存器用途
- 三、排查步驟
一、RT_Thread系統死機日志定位
RT-Thread 系統發生hardfault死機時,系統默認會打印出一系列寄存器狀態幫助用戶定位死機問題。那么要定位死機問題,必須先明白相關寄存器含義。
二、Cortex-M3 / M4架構知識
2.1 Cortex-M3 / M4架構概述
2.2 寄存器用途
- R0~R12,通用目的寄存器
- R0~R7為低寄存器,許多16位指令只能訪問低寄存器;
- R8~R12位高寄存器,可用于32位指令和幾個16位指令,如 MOV
- R13,棧指針(SP) :存儲當前任務的棧頂地址
- MSP 主棧指針:
- PSP 進程棧指針 : 用于嵌入式OS
- 注 : 棧用于存儲函數調用、局部變量和中斷處理等
- R14, 鏈接寄存器(LR) : 存儲函數調用指令的返回地址
- 當函數調用結束時,該地址用于返回到調用函數的位置。
- 當函數調用結束時,該地址用于返回到調用函數的位置。
- R15, 程序計數器(PC)
此外還有以下寄存器 - 狀態寄存器(PSR):存儲處理器的狀態信息,包括標志位、中斷使能位和處理模式等
- 控制寄存器(CONTROL):用于控制處理器的特殊功能,例如處理器模式的切換和棧指針的選擇
- 中斷控制器(NVIC)寄存器:這些寄存器用于配置和控制中斷。包括中斷使能寄存器(ISER)、中斷禁用寄存器(ICER)、中斷優先級寄存器(IPR)等
三、排查步驟
- 找到MCU打印的hardfault日志,RT-Thread系統已集成,裸機或其他RTOS系統可移植cmbacktrace庫;日志會包含上述描述寄存器和各線程棧的運行狀態、線程棧占用情況
- 分析LR指針,定位hardfault前運行函數
2.1 結合map表所有函數首地址范圍,定位. - 在定位位置上下關聯排除查看分析