stm32 怎么进入 HARD_FAULT 中断

jiangxue11111 2018-04-11 04:24:44
各位大神 谁有可以直接使stm32f429 进入HARDFAULT中断的程序,小弟跪求!!! (我想模拟进入HARD_FAULT中断,锻炼解决此问题的办法),谢谢大家!
...全文
1221 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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。

27,509

社区成员

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

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