1、问题描述
在stm32h743平台上测试裸机版音乐播放器循环播放音乐正常,将驱动文件sai.c和wm8978.c移植到UCOSIII(版本V3.07.03)+emWin+FatFs平台上制作音乐播放器。测试时,一曲歌还没播完就出现了宕机(每次出现时间不一样)。
2、调试步骤
调试发现,宕机大部分时候进入的是MemManage_Handler,极少数时候进入HardFault_Handler。
2-1、MemManage_Handler调试
调试 MemManage_Handler 时,IACCVIOL 报错潜在的原因如下
1、跳转到一个没有在MPU定义或不可执行的区域
2、由于栈的事故造成返回值无效
3、在异常向量表的不正确入口
定位到故障代码位置,显示汇编的地址为0x41BFFFEE,如图1
图1
采用KEIL故障异常分析手册【AN209, Summer 2017, V 5.0】中介绍的调试方法,如图2
图2
看到发生中断前的PC指针指向地址为0X41C00000,指向一个未知区域,如图3、图4
图3
图4
2-2、HardFault_Handler调试
偶尔进入的HardFault_Handler,指向的位置如图5
图5
怀疑过MPU