当前位置: 首页 > wzjs >正文

游戏网站制作模板设计模板网站

游戏网站制作模板,设计模板网站,凡科网站怎么关闭建设中,做企业邮箱的网站【KEIL5】HardFault问题DEBUG排查方式 文章目录 [TOC](文章目录) 前言一、Cortex-M3 权威指南——寄存器组概念1.通用寄存器2.堆栈指针——重要3.连接寄存器4.程序计数寄存器5.特殊功能寄存器 二、内存区域概念1.内存区域解析2.代码例程 三、实验1.复现BUG2.查找MSP3.定位代码段…

【KEIL5】HardFault问题DEBUG排查方式


文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、Cortex-M3 权威指南——寄存器组概念
    • 1.通用寄存器
    • 2.堆栈指针——重要
    • 3.连接寄存器
    • 4.程序计数寄存器
    • 5.特殊功能寄存器
  • 二、内存区域概念
    • 1.内存区域解析
    • 2.代码例程
  • 三、实验
    • 1.复现BUG
    • 2.查找MSP
    • 3.定位代码段
    • 4.排查原因
  • 三、参考文章
  • 总结

实验工具:
1.MCU
2.DEBUG工具
3.KEIL5

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、Cortex-M3 权威指南——寄存器组概念

在这里插入图片描述

1.通用寄存器

在这里插入图片描述

2.堆栈指针——重要

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.连接寄存器

在这里插入图片描述

4.程序计数寄存器

在这里插入图片描述

5.特殊功能寄存器

在这里插入图片描述
在这里插入图片描述

二、内存区域概念

1.内存区域解析

栈区(Stack)
local_var(局部变量)、param(函数参数)
特点:自动分配/释放,生命周期与函数执行周期一致。
堆区(Heap)
heap_ptr 指向的内存(通过 malloc 分配)
特点:需手动 malloc/free,生命周期由程序员控制。
全局区(静态区)
global_var(已初始化全局变量)、static_var(静态变量)、uninitialized_global(未初始化全局变量)
特点:程序启动时分配,结束时释放,静态变量仅初始化一次。
文字常量区
“Hello, World!”(字符串常量)
特点:存储常量字符串,生命周期贯穿整个程序运行期。
代码区
example_function 和 main 的二进制代码
特点:存储函数指令,只读且不可修改。

2.代码例程

#include <stdio.h>
#include <stdlib.h>// 全局区(静态区)
int global_var = 10;          // 已初始化的全局变量(数据段)
int uninitialized_global;     // 未初始化的全局变量(BSS段)// 文字常量区
const char* str_literal = "Hello, World!"; // 字符串常量存储在文字常量区// 代码区
void example_function(int param) {// 栈区:局部变量和函数参数int local_var = 20;       // 局部变量存储在栈区static int static_var = 30; // 静态变量存储在全局区(静态区)// 堆区:动态分配内存int* heap_ptr = (int*)malloc(sizeof(int)); // 通过malloc分配堆内存*heap_ptr = 40;printf("Stack param: %d\n", param);      // 访问栈区的函数参数printf("Stack local: %d\n", local_var);  // 访问栈区的局部变量printf("Static var: %d\n", static_var);  // 访问全局区的静态变量printf("Heap var: %d\n", *heap_ptr);     // 访问堆区的动态内存printf("Global var: %d\n", global_var);  // 访问全局区的全局变量printf("String literal: %s\n", str_literal); // 访问文字常量区的字符串free(heap_ptr); // 释放堆内存(需手动管理)
}int main() {example_function(5); // 传递栈参数return 0;
}

三、实验

1.复现BUG

在进入HardFault中断处,打断点
在这里插入图片描述

2.查找MSP

对应左侧寄存器组,找到堆栈指针寄存器中的MSP和PSP,如果是 0XFFFFFFF9,那么中断前使用的是 MSP,如果是 0XFFFFFFFD,那么中断前使用的是 PSP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.定位代码段

在这里插入图片描述

4.排查原因

1. 内存访问错误
未初始化指针:访问未分配或已释放的内存(野指针)。
数组越界:操作超出数组边界。
栈溢出:局部变量过多、递归过深或中断嵌套过深。
内存对齐问题:某些架构要求数据按特定对齐方式访问(如STM32的LDRD/STRD指令)。
2. 未定义指令或非法操作
执行非法指令:如尝试执行未被处理器支持的指令。
错误的函数指针:调用未初始化的函数指针或错误地址。
中断向量表损坏:中断服务例程(ISR)地址被意外修改。
3. 外设配置错误
未初始化外设:直接操作未使能的外设寄存器。
寄存器误配置:写入保留位或非法值到外设寄存器。
DMA配置冲突:源/目标地址冲突或DMA通道未正确配置。
4. 中断相关问题
中断优先级冲突:高优先级中断被低优先级中断打断。
中断服务例程(ISR)错误:在ISR中调用阻塞函数或访问非法内存。
未清除中断标志:导致中断重复触发。
5. 硬件故障
电源不稳定:电压波动或供电不足。
时钟配置错误:PLL未锁定或时钟源配置错误。
硬件损坏:RAM/Flash故障或总线错误。
6. 软件逻辑错误
多线程竞争:未加锁的共享资源访问(如RTOS任务间)。
死循环或死锁:导致看门狗超时(若启用)。
库函数误用:如错误使用标准库或HAL库API。

三、参考文章

ARM嵌入式软件开发 - 寄存器组 (SP, LR, PC)[0x04]
【STM32】HardFault问题详细分析及调试笔记
STM32单片机编程调试常见问题(一) HardFault_Handler故障分析与解决

总结

本文仅仅简单介绍了【KEIL5】HardFault问题DEBUG排查方式,评论区欢迎讨论。

http://www.dtcms.com/wzjs/174147.html

相关文章:

  • 做资格核查在哪个网站信息流推广渠道
  • 建设部监理网站官网安卓aso关键词优化
  • 做的网站侵犯美的商标赔偿多少钱搜索seo优化托管
  • 网页设计图片如何显示百度seo排名优化如何
  • 网站自助平台推广形式有哪几种
  • 地产商网站建设网站模板哪里好
  • 好看的登录页面自适应模板长沙优化科技有限公司
  • 织梦网站模块谷歌商店app下载
  • 哪个网站有成品的毕业论文站长之家域名解析
  • 深圳营销型网站公司电话百度推广怎么弄
  • 网站建设800元全包全网推广公司
  • 临河做网站seo中文意思
  • 潍坊做公司网站360关键词指数查询
  • 免费网站建设ydwzjs推广下载app拿佣金
  • 网站怎么做外部优化bt磁力天堂torrentkitty
  • 做图赚钱的网站有哪些网络服务合同纠纷
  • 做行程的网站产品推广哪个平台好
  • 怎么建设代刷网站白帽优化关键词排名seo
  • 济南360做网站电话营销网站建设的因素
  • 昆明制作企业网站网络营销的工具有哪些
  • 电脑有了外网是不是就可以做网站腾讯云1元域名
  • wordpress文章收藏功能西安seo服务公司排名
  • 中国免费网站建设无锡seo网站排名
  • 营销型网站建设技术指标互联网营销专业
  • 网站使用了seo优化工具怎么检测免费舆情网站下载大全最新版
  • 网站如何改造wapseo优化神器
  • 网站建设团队技术介绍苏州网站建设制作公司
  • 摄影培训网站建设石嘴山网站seo
  • 淘客招商网站选品库建设凡科建站和华为云哪个好
  • 网站做推广被禁止访问了成人用品哪里进货好