STM32 嵌入式操作系统的进入 HardFault_Handler分析

2023-05-16

STM32在使用中,因为一般没有其他异常抛出,所以抛出异常一般都是HardFault_Handler.

导致产生该现象的原因有一下几点:

(1)数组越界操作;

(2)内存溢出,访问越界;

(3)堆栈溢出,程序跑飞;

(4)中断处理错误;

一,数组越界

毋庸置疑,程序中使用了静态数组,而在动态传参时数组赋值溢出。或者动态分配内存太小,导致程序异常。

二,内存溢出

重点检查RAM区域,程序编译后执行的RAM数据量大小为多少是否可能越界。一般不要设置到极致的情况,程序中的一些动态数组传参时会导致异常。

image

计算 RW-data+ZI-data 为需要存储在RAM区域的变量等。

检查程序编译后的.MAP文件。

对应手册,或者编译器查找到对应RAM存储空间区域。找到该区域分析,并对应。

image

例入 此芯片的RAM区域为0X20000000的48K的存储空间,检查这些变量,特别是全局变量的分配。

RAM区域内存分配不足时,检查某些变量是否可以申请为存在代码区域。

本设计中可以看到,由于申请了几个大的静态数组,RAM区域已经使用到了b790 离 C000的48K 内存已十分接近。

在这种问题下,尤其需要注意:

使用Printf,vsprintf,sprintf 格式化数据导致的内存问题,这些函数使用的内存空间较大,猜测是由于,该函数采用的拷贝数组的形式转换,内存耗费剧烈。

使用操作系统的若为 设置钩子函数抛出异常,则也会产生该问题。配置操作系统所用空间,包含消息量,消息队列,邮箱,任务堆栈等。

三,堆栈溢出

这在使用操作中问题尤其严重,在操作系统中,任务的变量均分配放置在任务所申请的堆栈空间中,例如FreeRTOS的


xTaskCreate

task. h

 

创建新的任务并添加到任务队列中,准备运行

 

Parameters:
pvTaskCode     指向任务的入口函数. 任务必须执行并且永不返回 (即:无限循环).
pcName     描述任务的名字。主要便于调试。最大长度由configMAX_TASK_NAME_LEN.定义
usStackDepth     指定任务堆栈的大小 ,堆栈能保护变量的数目- 不是字节数. 例如,如果堆栈为16位宽度,usStackDepth定义为 100, 200 字节,这些将分配给堆栈。堆栈嵌套深度(堆栈宽度)不能超多最大值——包含了size_t类型的变量
pvParameters     指针用于作为一个参数传向创建的任务
uxPriority     任务运行时的优先级( 0 : 优先级最低)
pvCreatedTask     用于传递一个处理——引用创建的任务
返回:
pdPASS 是如果任务成功创建并且添加到就绪列中,另外错误代码在projdefs. H文件定义  

所创建的任务需要指定堆栈大小,那么堆栈申请不足,则会出现异常,针对该问题可启动系统的钩子函数HOOK函数,抛出该异常。

四,中断处理异常

程序中开启了某些中断,例如USART,TIMER,RTC等。

但在程序执行中,满足中断条件,但并未能查找到该部分对应的中断服务函数,则会抛出该异常。

转载于:https://www.cnblogs.com/xiumusheng/p/10948927.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 嵌入式操作系统的进入 HardFault_Handler分析 的相关文章

  • 禁用MOSS2007“我的网站”功能

    转载自 xff1a 禁用MOSS2007 我的网站 功能 建立完Moss2007的SSP服务之后 xff0c 默认会为所有验证用户打开 我的网站 的链接 xff0c 如下图所示 xff1a 并不是所有人都会需要这个功能的 xff0c 我们可
  • Linux搭建waf防火墙,Nginx使用Naxsi搭建Web应用防火墙(WAF),防xss、防注入

    一 说明 Naxsi是一个开放源代码 高效 低维护规则的Nginx web应用防火墙 Web Application Firewall 模块 Naxsi的主要目标是加固web应用程序 xff0c 以抵御SQL注入 跨站脚本 跨域伪造请求 本
  • 程序员、架构师、技术经理、技术总监和CTO有啥区别?

    http www javaranger com archives 1997 程序员 程序员 xff0c 英文名coder programmer xff0c 大家常自嘲叫码农的阶段 这个角色职责是把需求或产品实现为用户可用的软件产品 此职位为
  • 在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)

    背景 脚本需要导入pytorch等库才能运行 脚本在windows上运行成功 xff0c 尝试放到linux上运行 linux服务器内存较小 方法一 xff1a 在linux上安装依赖 把脚本放到linux上 xff0c 直接安装依赖 安装
  • ubuntu 16.04 配置静态ip 后默认的网卡eno1变成eth0了不能联网的问题解决

    我这次是在真实机器上面安装的ubuntu16 04 在配置了静态ip后不懂什么原因默认的eno1网卡变回了eth0网卡之后就不能上网 xff0c 同一个网段的其他集群节点也不能ping 通 因为ubuntu16 04的默认网卡不再是eth0
  • 快速测试端口的连通性(HTTP/HTTPS)

    ping 仅限 80 端口 xff0c 命令中无法指定端口 xff1a span class hljs label C span Users Administrator gt span class hljs built in ping sp
  • 支持 UTF-8 中文的串口调试工具

    支持 UTF 8 中文的串口调试工具 最近使用 mdk526 xff0c 编辑设置使用 utf 8 xff0c 编辑窗口中文正常 xff0c 但是编译的时候提示 warning 870 D invalid multibyte charact
  • Linux

    Linux服务 TOC mysql 关系型数据库 关系 就是一个一个的二维表 其中 表中的行 列次序并不重要 行 record 表中的每一行 又称为一条记录 列 column 表中的每一列 称为属性 字段 主键 primary key 是一
  • Eclipse怎么样添加智能感知提示功能(含Windows版和Mac版)

    近日感兴趣于安卓 xff0c 开始学习Android开发 第一次使用Eclipse xff0c 用久了VS xff0c 也习惯了他的智能提示 xff0c 刚转到Eclipse下实在是不习惯 网上有人说按Alt 43 可以实现单词补全功能 x
  • ORB-SLAM2:一种开源的VSLAM方案(译文)

    摘要 xff1a ORB SLAM2是基于单目 xff0c 双目和RGB D相机的一套完整的SLAM方案 它能够实现地图重用 xff0c 回环检测和重新定位的功能 无论是在室内的小型手持设备 xff0c 还是到工厂环境的无人机和城市里驾驶的
  • 双目视觉几何框架详解

    一 图像坐标 xff1a 我想和世界坐标谈谈 A 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题 希望这样的方式让大家以一个轻松的心态阅读玉米的 计算机视觉学习笔记 双目视觉数学架构系列博客 这个系列博客旨在捋顺一下已标定的双目
  • C#之委托

    委托 xff1a 顾名思义 xff0c 让别人帮你办件事 委托是C 实现回调函数的一种机制 可能有人会问了 xff0c 回调函数是个啥 xff1f xff1f xff1f 举个例子 xff1a 我现在是一家公司的老板 xff0c 公司现在在
  • http://mirrors.163.com/centos/7.6.1810/os/x86_64/repodata/repomd.xml: [Errno 14]

    执行 vi etc yum repos d CentOS Base repo 里面内容都清楚 xff0c 然后把下面的复制粘贴上 CentOS Base repo The mirror system uses the connecting
  • 剑指offer T8跳台阶

    由推导可知 xff0c 递推公式为 f n 61 f n 1 43 f n 2 迭代法 xff1a 递归 xff1a 递归优化 xff08 保存结果 xff0c 剪枝 xff09 xff1a 转载于 https www cnblogs co
  • linux磁盘占用满了,docker日志清理

    磁盘分析命令 xff1a df h 查看当前文件夹所有文件大小 xff1a du sh 查看docker各容器占用的磁盘空间 du d1 h var lib docker containers sort h docker日志文件 xff1a
  • Install gitlab enterprise on ubuntu

    1 Install and configure the necessary dependencies sudo apt get update sudo apt get install y curl openssh server ca cer
  • python-docx 设置标题heading的中文字体类型+设置正文的中文字体类型

    依赖包 xff1a from docx import Document from docx shared import Pt from docx shared import Inches from docx oxml ns import q
  • 单片机显示原理(LCD1602)

    一 xff0e 接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器 xff0c 它的主控芯片是HD44780或者其它兼容芯片 与此相仿的是LCD12864液晶显示器 xff0c 它是一种图形点阵显示器 xff0c 能显示的内容
  • 使用Simulink进行无刷直流电机控制仿真

    这段时间刚开始接触Matlab中的Simulink仿真 xff0c 我就结合自己的专业 xff0c 利用Simulink进行了无刷直流电机的仿真 xff0c 因为Simulink工具箱里面有很多可用的模块 xff0c 所以建模过程变得非常简
  • MATLAB绘制向量图

    MATLAB绘制向量图 对于如何在二维平面中绘制带箭头的向量 xff0c 先给出一个实例 xff1a clear clc A 61 4 5 B 61 10 0 C 61 A 43 B M 61 A B C X 61 M 1 A 1 Y 61

随机推荐

  • 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100

    RAID 技术相信大家都有接触过 xff0c 尤其是服务器运维人员 xff0c RAID 概念很多 xff0c 有时候会概念混淆 这篇文章为网络转载 xff0c 写得相当不错 xff0c 它对 RAID 技术的概念特征 基本原理 关键技术
  • 推荐几个知名顶级的文献网站

    有人在后台给我留言 xff0c 让我推荐几个查找文献的网站 xff0c 周末特别花了点时间整理了一下 在这里推荐给大家 xff0c 希望对大家有帮助 xff01 本文总共分为2篇 xff0c 一篇为国内的网站 xff0c 一篇为国外的网站
  • 树莓派3折腾笔记

    这篇教程将带您一起玩转树莓派3 xff08 Raspberry Pi 3 xff09 和普通PC一样 xff0c 拿到新设备第一件事就是要给它安装一个操作系统 xff0c 并做一些初始化的操作 比PC简单的是 xff0c 树莓派是一个固定配
  • linux系统怎么安全杀毒软件,Linux系统用什么杀毒软件 为什么Linux不中毒

    Linux下有哪些杀毒软件 国产的我找了一遍貌似没有 xff0c 国外的avast norton eset也不支持 其实之前有了解过Linux不容易中毒 xff0c 但没有考虑过Linux下有哪些杀毒软件 xff0c 为什么Linux不容易
  • electron与jquery起冲突,使用jquery报错解决方法

    问题原因 xff1a Electron 为了整合 Node js xff0c 会在 DOM 加入 module exports require 等模块和函数 xff0c 和jQuery RequireJS Meteor AngularJS
  • 安装图形化界面consol/centos-xfce-vnc

    直接通过docker hub上的centos镜像安装centos docker search centos docker 64 localhost education docker search centos NAME DESCRIPTIO
  • php curl http digest

    php用curl访问有http digest验证的网址时 xff0c 不能直接加在URL上 xff0c 例如 xff1a http user pass 64 xxx xxx xxx xxx index php a 61 1 amp b 61
  • PS基础教程[1]如何制作微信泡泡

    PS是很多朋友都很喜欢额一款图像处理软件 xff0c 我们可以使用PS制作很多的效果 xff0c 本系列经验教程的起源就来源于知道中这位朋友问的微信泡泡如何使用 xff0c 下面就来简单的分享一下 微信泡泡制作方法 有很多的方法可以制作这种
  • 《计算机组成原理》第6章:总线

    第6章 xff1a 总线 6 1 总线概述 总线的定义 总线是一组能为多个部件分时共享的公共信息传送线路 分时和共享是总线的两个特点 分时是指同一时刻只允许有一个部件向总线发送信息 xff0c 如果系统中有多个部件 xff0c 则它们只能分
  • Fragment生命周期及add、replace、remove、hide&show方法分析

    转载自https blog csdn net u014699958 article details 52996143 项目有一个Activity类和3个Fragment类 Activity 中放置3个按钮 xff08 实质TextView
  • Fragment 中使用 getActivity()为null的原因---剖析源码

    问题 xff1a 使用 AS 在 Fragment 中调用 getActivity 方法的时候会出现可能为空指针的提醒 思考 为什么会出现这种情况 xff0c 按说当前 Activity 存在 xff0c 在 Fragment 中使用 ge
  • 测试用例设计方案

    以淘宝加入购物车为例 xff1a 1 看整个流程分为几个节点 xff1a a 选择物品 b 点击加入购物车 c 查看购物车 结果验证 2 根据每个节点的输入输出设计场景 a 选择物品的场景的影响因素 xff1a 请求来源 设备 账号 库存
  • CSS transform中的rotate的旋转中心怎么设置

    transform origin 属性 默认情况 xff0c 变形的原点在元素的中心点 xff0c 或者是元素X轴和Y轴的50 处 我们没有使用transform origin改变元素原点位置的情况下 xff0c CSS变形进行的旋转 移位
  • 松耦合和紧耦合

    Question 首先 xff0c 明确一点 xff0c 什么是松耦合 xff1f 什么是紧耦合 xff1f Answer 比如说两个模块 xff0c A模块和B模块 xff0c 当两者的关联非常多的时候 xff0c 就叫紧耦合 xff0c
  • 把pandas dataframe转为list方法

    把pandas dataframe转为list方法 先用numpy的 array 转为ndarray类型 xff0c 再用tolist 函数转为list 转载于 https www cnblogs com lichunl p 9622923
  • docker容器中使用top、free命令查看容器真实cpu和内存使用情况的实践

    参考 xff1a https www colabug com 1759782 html 转载于 https www cnblogs com robinunix p 10482908 html
  • 人性的弱点之情商

    处理好人际关系 真诚赞美他人 xff0c 不要过度批评他人 赢得他人喜爱的4个方式 xff1a 真诚关注他人 记住名字和生日 建立好的第一印象 保持微笑 善谈就是倾听 迎合对方兴趣 让他人为你所用 xff1a 避免争论 避免树敌 坦率承认自
  • 小米笔记本进入安全模式比较靠谱的方法

    在锁屏界面 xff0c 按住shift按键 xff0c 然后右下角进入重启就可以进入win10恢复模式 转载于 https www cnblogs com yang xiansen p 10471358 html
  • pytorch 中Tensor.uniform_代替numpy.random.uniform

    uniform from 61 0 to 61 1 Tensor 将tensor用从均匀分布中抽样得到的值填充 例如 a 61 torch Tensor 2 3 uniform 1 1 转载于 https www cnblogs com z
  • STM32 嵌入式操作系统的进入 HardFault_Handler分析

    STM32在使用中 xff0c 因为一般没有其他异常抛出 xff0c 所以抛出异常一般都是HardFault Handler 导致产生该现象的原因有一下几点 xff1a 1 数组越界操作 xff1b 2 内存溢出 xff0c 访问越界 xf