文章写的很好,待整理

1.【STM32】HardFault问题详细分析及调试笔记

https://blog.csdn.net/m0_54916619/article/details/129979222

需备注:

cortex m4:  实际行为是,寄存器按照编号从小到大的顺序在栈帧中从数值较小地址往数值较大的地址排列.    进入异常时自动入栈R0-R3 R12 LR PSR

2.   stm32死机问题的处理

https://blog.csdn.net/qq_27087571/article/details/84580532

void hard_fault_handler_c(unsigned int * hardfault_args)
{
static System_Crash_Info crash_info;
memset(&crash_info, 0, sizeof(System_Crash_Info)); crash_info.is_crash = 1;
crash_info.crash_time = (unsigned int)HAL_GetTick(); crash_info.stacked_r0 = ((unsigned long) hardfault_args[0]);
crash_info.stacked_r1 = ((unsigned long) hardfault_args[1]);
crash_info.stacked_r2 = ((unsigned long) hardfault_args[2]);
crash_info.stacked_r3 = ((unsigned long) hardfault_args[3]);
crash_info.stacked_r12 = ((unsigned long) hardfault_args[4]);
crash_info.stacked_lr = ((unsigned long) hardfault_args[5]);
crash_info.stacked_pc = ((unsigned long) hardfault_args[6]);
crash_info.stacked_psr = ((unsigned long) hardfault_args[7]); crash_info.MFSR = (*((volatile unsigned char *)(0xE000ED28))); //存储器管理fault状态寄存器
crash_info.BFSR = (*((volatile unsigned char *)(0xE000ED29))); //总线fault状态寄存器
crash_info.UFSR = (*((volatile unsigned short int *)(0xE000ED2A)));//用法fault状态寄存器
crash_info.HFSR = (*((volatile unsigned long *)(0xE000ED2C))); //硬fault状态寄存器
crash_info.DFSR = (*((volatile unsigned long *)(0xE000ED30))); //调试fault状态寄存器
crash_info.MMAR = (*((volatile unsigned long *)(0xE000ED34))); //存储管理地址寄存器
crash_info.BFAR = (*((volatile unsigned long *)(0xE000ED38))); //总线fault地址寄存器 u8 ret = STMFLASH_EraseSector(STMFLASH_GetFlashSector(SYS_CRASH_INFO_ADDR));
u8 ret2 = STMFLASH_Write(SYS_CRASH_INFO_ADDR, (u32 *)(&crash_info), (3+sizeof(System_Crash_Info))/4); while (1);
}

这里的潜在意思是, ARM平台的C函数入参,按顺序,依次可以获取到R0 R1 R2 R3 等,所以可以通过静态的crash_info将其记录下来。

3.  RTOS任务切换和异常的相关性很大

基于STM32 F103 CM3内核 freeRTOS 任务切换原理

https://zhuanlan.zhihu.com/p/599020378

.

cortex-m3 m4 异常机制的更多相关文章

  1. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  2. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)

    ARM架构:  由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7:       一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...

  3. 【freertos】002-posix模拟器设计与cortex m3异常处理

    目录 前言 posix 标准接口层设计 模拟器的系统心跳 模拟器的task底层实质 模拟器的任务切换原理 cortex M3/M4异常处理 双堆栈指针 双操作模式 栈帧 EXC_RETURN 前言 如 ...

  4. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  5. stm32和cortex M3学习内核简单总结

    1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...

  6. Atitit 异常机制与异常处理的原理与概论

    Atitit 异常机制与异常处理的原理与概论 1. 异常vs 返回码1 1.1. 返回码模式的处理 (瀑布if 跳到失败1 1.2. 终止模式  vs 恢复模式(asp2 1.3. 异常机制的设计原理 ...

  7. C++ 异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  8. 【转载】C++异常机制的学习

    参考了这篇文章:http://blog.chinaunix.net/uid-24517549-id-4079174.html 关于线程 进程和线程的概念相信各位看官早已耳熟能详.在这里,我只想带大家回 ...

  9. Java异常机制

    Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...

  10. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

随机推荐

  1. Django 继承AbstractUser扩展用户模型

    Django 继承AbstractUser扩展用户模型 by:授客 QQ:1033553122 测试环境 Win 10   Python 3.5.4   Django-2.0.13.tar.gz 官方 ...

  2. 七天.NET 8操作SQLite入门到实战 - 第七天Blazor学生管理页面编写和接口对接(3)

    前言 本章节我们的主要内容是完善Blazor学生管理页面的编写和接口对接. 七天.NET 8 操作 SQLite 入门到实战详细教程 第一天 SQLite 简介 第二天 在 Windows 上配置 S ...

  3. 在Centos7中使用一键脚本安装Oracle11g

    在Centos7中使用一键脚本安装Oracle11g 1. 环境准备 1.1 系统版本:Centos7.9(2009) 1.2 Oracle版本:Oracle 11g 11.2.0.4 1.3 网络需 ...

  4. Linux安装软件命令详解

    Linux安装软件命令详解 目录 一.deb包的简介.安装及卸载步骤 二.rpm包的简介.安装及卸载步骤 三.AppImage包的简介.执行步骤 四.tar.gz.tar.bz2源代码包的简介.安装及 ...

  5. Cesium 实现可视域分析

    *前言:尝试了网上好多个版本的可视域分析,感觉都有一些问题,我这个也可能不是最完美的,但是我觉得对我来说够用了,实现效果如下* 此示例基于vue3上实现,cesium版本1.101.0 ,vite-p ...

  6. 【郝斌C ST】指针 swap问题

    C语言 指针 swap问题 在主函数种实现变量的交换 现在我们把这交换的行为封装进方法中 swap函数确实进行了交换,打印也是10和5了,但是下面a和b的结果还是5和10 - 形参i 和 形参j 并不 ...

  7. 【Docker】02 上手入门

    环境前提: 软硬件设备:真机 | 服务器 | 虚拟机 操作系统:Linux 协议传输工具:XSHELL等等,直接操作就不用了 网路:必须得有 Docker的安装: 还好在学Linux的时候装了一下,发 ...

  8. 【Hibernate】Re01 快速入门

    官网地址: http://hibernate.org/orm/releases/5.4/ 地址: https://bintray.com/hibernate/artifacts/hibernate-o ...

  9. jdk命令行工具系列——检视阅读

    jdk命令行工具系列--检视阅读 参考 java虚拟机系列 RednaxelaFX知乎问答 RednaxelaFX博客 jps--虚拟机进程状态工具 jps :(JVM Process Status ...

  10. 国产AI发展是百家争鸣还是疯狂内卷(内耗)?

    本文纯属闲谈(吐槽) 国外搞深度学习弄出了TensorFlow(编译型)以后推到工业界和学术界,但是由于其不好用(太过于复杂),同一时间另一个框架pytorch(非编译型).由于pytorch是非编译 ...