MPC5748G程序跑飞uSDHCDriverIRQHandler
前言
最近调试MPC5748G的时候程序总是跑飞,为了快速定位跑飞的地方,需要增加软件断点,提高调试效率。
一、跑飞时的状态
二、利用异常中断获取位置
1.MPC5748G中断分析
MPC574xG的中断向量寄存器(IVPR)提供了下面12个个中断类型
IVOR0: Critical Input Interrupt (offset 0x00)
IVOR1: Machine Check Interrupt (offset 0x10)
IVOR2: Data Storage Interrupt (offset 0x20)
IVOR3: Instruction Storage Interrupt (offset 0x30)
IVOR4: External Input Interrupt (offset 0x40)
IVOR5: Alignment Interrupt (offset 0x50)
IVOR6: Program Interrupt (offset 0x60)
IVOR7: Performance Monitor Interrupt (offset 0x70)
IVOR8: System Call Interrupt (offset 0x80)
IVOR9: Debug Interrupt (offset 0x90)
IVOR10: Embedded Floating-point Data Interrupt (offset 0xA0)
IVOR11: Embedded Floating-point Round Interrupt (offset 0xB0)
2.增加异常中断软件断点
代码如下(示例):
void IVOR1_Exception_Handler(void)
{
//This is for Debug quickly!
//exit_code = 0;
BKPT_ASM;
}
void IVOR6_Exception_Handler(void)
{
//This is for Debug quickly!
//exit_code = 0;
BKPT_ASM;
}
总结
在main.c中增加上面代码在进行调试时可快速获取到系统异常,利用堆栈信息即可找到跑飞的函数进而定位出问题。