Exception handling 阿特梅尔工作室虚拟处理器
偶尔我会收到一个意外的中断,我的代码将挂在Atmel Studio Framework(ASF)的Exception handling 阿特梅尔工作室虚拟处理器,exception-handling,arduino,interrupt-handling,atmel,atsam3x,Exception Handling,Arduino,Interrupt Handling,Atmel,Atsam3x,偶尔我会收到一个意外的中断,我的代码将挂在Atmel Studio Framework(ASF)的exceptions.c中的虚拟处理器()中。我正在使用Arduino Due的ATSAM3X8E微控制器 void Dummy_Handler(void) { while(1) { } } 你知道如何判断是哪个中断吗 当然,我可以用唯一的虚拟处理程序替换这个处理程序,每个异常对应一个。(大约有50行。)例如,更改同一exceptions.c文件中的每一行: void HardFa
exceptions.c
中的虚拟处理器()中。我正在使用Arduino Due的ATSAM3X8E微控制器
void Dummy_Handler(void)
{
while(1) {
}
}
你知道如何判断是哪个中断吗
当然,我可以用唯一的虚拟处理程序替换这个处理程序,每个异常对应一个。(大约有50行。)例如,更改同一exceptions.c文件中的每一行:
void HardFault_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
对此
void HardFault_Handler ( void ) __attribute__ ((weak, alias("Dummy_HardFault_Handler")));
等等。。。或者试着解释一下我的代码是如何产生中断的。但是谁有这样的时间呢?这个MCU有一个中断程序状态寄存器,可以提供一些关于源代码的线索。ASF已将其包装在core\u cmFunc.h中的函数中
uint32_t phantomISR = 9999;
void Dummy_Handler(void)
{
while(1) {
phantomISR = __get_IPSR();
}
}
然后可以在运行时监视此全局变量。(在我的例子中,我暂停了这个死亡循环的汇编代码,并在R3寄存器中看到了值3。)Atmel MCU文档解释了它的值:
ISR_NUMBER
This is the number of the current exception:
0 = Thread mode
1 = Reserved
2 = NMI
3 = Hard fault
4 = Memory management fault
5 = Bus fault
6 = Usage fault
7-10 = Reserved
11 = SVCall
12 = Reserved for Debug
13 = Reserved
14 = PendSV
15 = SysTick
16 = IRQ0
45 = IRQ29
此外,在调试模式下可通过暂停进行检测。当然续集是?我猜是内存擦除还是无限递归
ISR(HardFault_Handler)
{
while (1) {
}
}