stm32 怎么进入 HARD_FAULT 中断

jiangxue11111 2018-04-11 04:24:44
各位大神 谁有可以直接使stm32f429 进入HARDFAULT中断的程序,小弟跪求!!! (我想模拟进入HARD_FAULT中断,锻炼解决此问题的办法),谢谢大家!
...全文
927 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2018-04-12
  • 打赏
  • 举报
回复
用指针就可以了 uint32_t * ptr32=0xFFFFFFF1;//非4的整数倍或者指向一个不存在的物理地址; uint32_t tmp=*ptr32;
八档电风扇 2018-04-12
  • 打赏
  • 举报
回复
引用 4 楼 fhqlongteng的回复:
引用 3 楼 jiangxue11111 的回复:
谢谢 这个方法我试过了 包括除数为0;可是 一直没有进入到 hard_fault的中断! 我用的是IAR。
,这种方法是可以的,你不成功的原因中,程序代码可能很简单,buf[20]的占用的空间没有被其他程序使用,所有即使你非法写了后也不会造成影响。通过IAR查看你的程序的堆栈的内存范围,在程序把堆栈中的数据全部写一下,这样会访问到非法的地址空间,就会进入hardfault中断。
这个方法确实可以,不行就写个递归
八档电风扇 2018-04-12
  • 打赏
  • 举报
回复
stm32的堆栈大小设置在.s启动文件中,程序调试时好像看不到实时占用的堆栈大小,不知大哥们有啥办法没
Acuity. 2018-04-12
  • 打赏
  • 举报
回复
访问空指针即可(如数组内存越界)!
fhqlongteng 2018-04-11
  • 打赏
  • 举报
回复
引用 6 楼 jiangxue11111 的回复:
引用 4 楼 fhqlongteng 的回复:
[quote=引用 3 楼 jiangxue11111 的回复:] 谢谢 这个方法我试过了 包括除数为0;可是 一直没有进入到 hard_fault的中断! 我用的是IAR。
,这种方法是可以的,你不成功的原因中,程序代码可能很简单,buf[20]的占用的空间没有被其他程序使用,所有即使你非法写了后也不会造成影响。通过IAR查看你的程序的堆栈的内存范围,在程序把堆栈中的数据全部写一下,这样会访问到非法的地址空间,就会进入hardfault中断。
是的! 你说的我明白了! 谢谢你! 怎么查看程序堆栈的内存范围? [/quote]这个可以百度一下吧,一时说不清楚的。还有一个简单粗暴的办法,写你的CPU的RAM中数据全部改写一下也是同样的道理。从0x2000 0000地址开始向后到结束全部改写。
jiangxue11111 2018-04-11
  • 打赏
  • 举报
回复
引用 4 楼 fhqlongteng 的回复:
引用 3 楼 jiangxue11111 的回复:
谢谢 这个方法我试过了 包括除数为0;可是 一直没有进入到 hard_fault的中断! 我用的是IAR。
,这种方法是可以的,你不成功的原因中,程序代码可能很简单,buf[20]的占用的空间没有被其他程序使用,所有即使你非法写了后也不会造成影响。通过IAR查看你的程序的堆栈的内存范围,在程序把堆栈中的数据全部写一下,这样会访问到非法的地址空间,就会进入hardfault中断。
是的! 你说的我明白了! 谢谢你! 怎么查看程序堆栈的内存范围?
fhqlongteng 2018-04-11
  • 打赏
  • 举报
回复
还有对一些外设不正常的操作,比如对初始化串口时,不打开串口时钟,后面读写串口寄存器就会进入hard fault中断,这个根芯片的设计有关系,你用的芯片能不能出现这种现象得试一下,我没有试过这个芯片。
fhqlongteng 2018-04-11
  • 打赏
  • 举报
回复
引用 3 楼 jiangxue11111 的回复:
谢谢 这个方法我试过了 包括除数为0;可是 一直没有进入到 hard_fault的中断! 我用的是IAR。
,这种方法是可以的,你不成功的原因中,程序代码可能很简单,buf[20]的占用的空间没有被其他程序使用,所有即使你非法写了后也不会造成影响。通过IAR查看你的程序的堆栈的内存范围,在程序把堆栈中的数据全部写一下,这样会访问到非法的地址空间,就会进入hardfault中断。
fhqlongteng 2018-04-11
  • 打赏
  • 举报
回复
补充一句:程序中访问buf[20]的方法,就是向buf[20]中写入数据,读操作是不会产生异常的。
fhqlongteng 2018-04-11
  • 打赏
  • 举报
回复
这个很简单,让程序产生内存泄露就行了。比如定义一个数组unsigned char buf[10]; 程序中访问buf[20]之后就行导致芯片进入hardfault中断。 关于你想找到进入hardfault中断的原理,可以 详细查看cortex-M4内核的手册,学习中断时压入堆栈的寄存器原理,可以通过这种方法在程序进入hardfault中断后,查看堆栈中数据的方式查找到导致程序出问题的位置。
jiangxue11111 2018-04-11
  • 打赏
  • 举报
回复
谢谢 这个方法我试过了 包括除数为0;可是 一直没有进入到 hard_fault的中断! 我用的是IAR。
《企业级 VMware vSphere 6.7虚拟化技术配置与管理》课程共分为“上集”和“下集”两部分,本套视频为“下集”部分,“上集”部分已经对VMware vSphere 6.7的计算资源、网络资源、存储资源、虚拟机配置与管理等进行了详细讲解,“下集”部分以“上集”为基础进行技术延伸,全面对vMotion、DRS、HA、FT、性能监控、VDP备份等特性进行理论讲解和实战配置。 通过本课程学习,可以全面掌握vMotion、资源池、DRS、HA、FT、VDP、监控等高可用性运维技能。 《企业级 VMware vSphere虚拟化技术配置与管理》下集部分具体课程章节如下。 第1章 《VMware vSphere 6.7 vMotion配置与管理》主要内容本章我们详细介绍了冷迁移、通过 vMotion 迁移、通过 Storage vMotion 迁移、CPU 兼容性和 EVC、在 vSphere Client中迁移已关闭电源或已挂起的虚拟机、将开机状态的虚拟机迁移至新计算资源和存储、关于迁移兼容性检查等内容。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第2章 《VMware vSphere 6.7 资源和DRS配置与管理》主要内容本章我们主要讲解了CPU虚拟化资源管理知识、内存虚拟化资源管理知识、存储虚拟化资源管理知识、资源池、DRS群集、Storage I/O Control、科学合理的进行资源分配相关理论和操作。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第3章 《VMware vSphere 6.7 HA配置与管理》主要内容本章我们主要讲解了业务连续性和最小化停机时间、vSphere HA 的工作原理、vSphere HA 准入控制、vSphere HA 互操作性等知识。通过实践操作,可以掌握创建 vSphere HA 群集,配置 vSphere HA群集,配置 Proactive HA。为了提高vCenter Server的高可用性,讲解了vCenter High Availability知识。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第4章 《VMware vSphere 6.7 FT配置与管理》主要内容本章我们从理论上讲解了Fault Tolerance 的工作原理、Fault Tolerance工作用例、Fault Tolerance 环境要求、限制和许可、Fault Tolerance 互操作性。以理论为基础,实践了打开Fault Tolerance功能、测试Fault Tolerance故障切换、迁移辅助虚拟机、挂起Fault Tolerance、恢复Fault Tolerance、关闭Fault Tolerance等内容。最后总结了使用Fault Tolerance的科学做法、Fault Tolerance的故障排除方法。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第5章 《VMware vSphere Data Protection(VDP)》 主要内容本章我们从理论上讲解vSphere Data Protection的基本功能、体系架构。演示了VDP的安装和配置,讲解了怎样正确使用VDP以及使用VDP进行管理备份,自动备份验证,管理恢复,复制作业,文件级恢复,紧急恢复,VDP代理等相关功能,最后针对VDP常见故障进行了总结分析。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 第6章 《VMware vSphere 6.7 监控和性能》 主要内容本章我们从理论上讲解了vSphere监控、性能、日志等相关基本知识。实践操作了使用性能图表监控清单对象、监控事件和警报、系统日志文件的配置。希望大家在掌握理论的基础上,跟做课程中涉及的每一个实验,达到融会贯通的效果。 企业级 VMware vSphere 6.7虚拟化技术配置与管理(上集)视频课程:https://edu.csdn.net/course/detail/35162企业级 VMware vSphere 6.7虚拟化技术配置与管理(下集)视频课程:https://edu.csdn.net/course/detail/35171
查看文章 STM32 keil mdk启动代码发分析_转2010年01月29日 星期五 13:50 ;// Stack Configuration ;// Stack Size (in Bytes) ;// Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段 按8字节对齐 ;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0 Stack_Mem SPACE Stack_Size ;//保留Stack_Size大小的堆栈空间 分 配连续 Stack_Size 字节的存储单元并初始化为 0 __initial_sp ;//标号,代表堆栈顶部地址,后面有用 ;// Heap Configuration ;// Heap Size (in Bytes) ;// Heap_Size EQU 0x00000020 ;//定义堆空间大小 AREA HEAP, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段,8字节对齐 __heap_base Heap_Mem SPACE Heap_Size ;//保留Heap_Size的堆空间 __heap_limit ;//标号,代表堆末尾地址,后面有用 PRESERVE8 ;//指示编译器8字节对齐 THUMB ;//指示编译器为THUMB指令 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY ;//定义只读数据段,其实放在CODE区,位于0地址 EXTERN NMIException EXTERN HardFaultException EXTERN MemManageException EXTERN BusFaultException EXTERN UsageFaultException EXTERN SVCHandler EXTERN DebugMonitor EXTERN PendSVC EXTERN SysTickHandler ;//声明这些符号在外部定义,同C ;//在××it.c中实现这些函数 ,中断就能自动调用了 EXPORT __Vectors EXPORT __initial_sp ;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用;I

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧