1、问题描述
- 程序没有按原来要求进行,暂停之后,发现跳转到DefaultISR
2、问题分析
- 经查资料,这种问题,一般是因为触发了中断,但是其中断函数没有定义,所以跳转到这里
3、问题查找
- 定义DefaultISR中断处理函数,在此函数里面定义打印中断控制状态寄存器或是直接调试看地址0xE000ED04处的值
- 调试查看寄存器的值,需要根据编译环境而定,这里不做说明
- 在函数定义的参考代码如下:
uint8_t buf[100];
#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
void DefaultISR(void)
{
/* 有printf可以用printf打印,结果一样 */
sprintf(buf,"\n****default_isr entered on vector %d %x *****\r\n\n", (uint8_t)VECTORNUM, (uint32_t)VECTORNUM);
Sys_SendString(buf); /* 串口数据发送 */
}
- 根据打印出来的数据,判断VECTOR,是怎么原因触发中断的。这里我的值为3,查对应芯片向量表,得知是Hard_Fault导致的。
其他
编写或是解释难免有错,欢迎指正。
如有侵权,联系我删除,谢谢!!!
另附参考链接(感谢作者):
[1]. https://www.eefocus.com/constyu/blog/17-03/408750_297e4.html