RT-Thread学习笔记(六):RT_Thread系统死机日志定位

一、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)等

三、排查步骤

  1. 找到MCU打印的hardfault日志,RT-Thread系统已集成,裸机或其他RTOS系统可移植cmbacktrace库;日志会包含上述描述寄存器和各线程栈的运行状态、线程栈占用情况
  2. 分析LR指针,定位hardfault前运行函数
    2.1 结合map表所有函数首地址范围,定位.
  3. 在定位位置上下关联排除查看分析

相关推荐

  1. rk3568调试

    2023-12-16 07:08:04       16 阅读
  2. W801学习笔记:掌系统——启动第一个应用

    2023-12-16 07:08:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 07:08:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 07:08:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 07:08:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 07:08:04       20 阅读

热门阅读

  1. uniapp微信小程序下载base64图片流或https图片

    2023-12-16 07:08:04       41 阅读
  2. RHCL8_Linux_ansible的使用

    2023-12-16 07:08:04       39 阅读
  3. vue与angular以及react的区别

    2023-12-16 07:08:04       32 阅读
  4. 浅谈“前端已死”论

    2023-12-16 07:08:04       37 阅读
  5. Vue双向数据绑定和小程序数据驱动有何异同?

    2023-12-16 07:08:04       38 阅读
  6. urllib.parse 用于解析 URL

    2023-12-16 07:08:04       37 阅读
  7. TOGAF—架构(Architecture)项目管理

    2023-12-16 07:08:04       39 阅读
  8. 华纳云:如何解决ubuntu中libsqlite3-0依赖问题?

    2023-12-16 07:08:04       41 阅读
  9. Scrapy的crawlspider爬虫

    2023-12-16 07:08:04       37 阅读
  10. 组件v-model和自定义v-model修饰符(vModelText)

    2023-12-16 07:08:04       40 阅读