文章写的很好,待整理

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. oeasy教您玩转vim - 76 - # 组合键映射map

    ​ 会话session 回忆组合键映射的细节 上次我们定义了一系列的复合键 主要是和ctrl键一起 快速跳转window窗口 map <c-j> <c-w>j map < ...

  2. java面试一日一题:垃圾回收器如何组合使用

    问题:请讲下java中垃圾回收器如何组合使用 分析:该问题主要考察对垃圾回收器的深度理解 回答要点: 主要从以下几点去考虑, 1.垃圾回收器有哪些种类,每种的特点 2.组合使用怎么理解 在上篇文章&l ...

  3. 2023/4/14 SCRUM个人博客

    1.我昨天的任务 初步了解项目的整体框架,并对接下来的人脸识别库以及组件有基本了解和安装 2.遇到了什么困难 ------------ 3.我今天的任务 获得了人脸识别作弊检测和绘制界面的分工,准备先 ...

  4. mybatisplus关于驼峰命名法与下划线的映射

    今天遇到一个很坑的事情,我在测试之前的案例的时候我有一个字段的名字是typeId,我调试之后发现插入出现了错误. 开启sql日志之后我发现mybatisplus自动把我的typeId改成type_id ...

  5. Python和RPA网页自动化-浏览器切换不同窗口页面

    以百度为例,点击[BOSS直聘]词条会打开一个BOSS新窗口页面,分别使用Python和RPA网页自动化在不同的窗口页面来回切换窗口完成以下顺序步骤 1.Python代码如下 步骤:打开新窗口页面后, ...

  6. SemanticKernel/C#:检索增强生成(RAG)简易实践

    检索增强生成(RAG)是什么? RAG是"Reference-based Generative model with Attention"的缩写,也可以被称为"Retri ...

  7. agnostic在计算机领域的常用翻译 —— location-agnostic deployment option

    关于agnostic的翻译: 例子: NVIDIA OSMO scales workloads across distributed environments. For robotics worklo ...

  8. OneFlow框架0.9.1dev版本,成功安装并运行

    安装cuda和cudnn: (此步骤可以忽略,pip安装框架时会自动安装依赖的cuda和cudnn环境) conda install cudatoolkit==11.8.0 python3 -m pi ...

  9. 如何将python的pip源设置为阿里云

    为python的pip源设置为阿里云,pip源的设置操作: pip config set global.index-url https://mirrors.cloud.aliyuncs.com/pyp ...

  10. 使用Redis时的vm.overcommit_memory内存分配控制

    最近在使用Redis的时候遇到了linux系统中的vm.overcommit_memory参数设置,对此不是很了解,于是研究了一下,有了本文. ============================ ...