Atmel Studio Dummy_Handler

Posted

技术标签:

【中文标题】Atmel Studio Dummy_Handler【英文标题】: 【发布时间】:2014-01-22 20:44:43 【问题描述】:

有时我会收到意外中断,我的代码会挂在 Atmel Studio Framework (ASF) 的 exceptions.c 中的 Dummy_Handler() 内。我正在使用 Arduino Due 的 ATSAM3X8E 微控制器。

void Dummy_Handler(void)

    while(1) 
    

任何想法如何确定哪个中断

当然,我可以用唯一的虚拟处理程序替换这个单一的处理程序,每个异常处理一个。 (大约有五十个。)例如更改同一 exceptions.c 文件中的每一行:

void HardFault_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

到这里

void HardFault_Handler  ( void ) __attribute__ ((weak, alias("Dummy_HardFault_Handler")));

等等...或者尝试推断我的代码是如何产生哪个中断的。但是谁有这样的时间呢?

【问题讨论】:

【参考方案1】:

这个 MCU 有一个中断程序状态寄存器,可以提供一些关于来源的线索。 ASF 已将其包装在 core_cmFunc.h 中的函数 __get_IPSR() 中:

uint32_t phantomISR = 9999;

void Dummy_Handler(void)

    while(1) 
        phantomISR = __get_IPSR();
    

然后可以在运行时监控这个全局变量。 (在我的例子中,我暂停了这个死循环的汇编代码,并在 R3 寄存器中看到了值 3。)Atmel MCU 文档解释了它的值:

ISR_NUMBER 这是当前异常的编号: 0 = 线程模式 1 = 保留 2 = NMI 3 = 硬故障 4 = 内存管理故障 5 = 总线故障 6 = 使用错误 7-10 = 保留 11 = SVCall 12 = 为调试保留 13 = 保留 14 = PendSV 15 = 系统标记 16 = IRQ0 45 = IRQ29

这两次都发生在我身上,这是硬故障,是 Ardunio Due 的一种蓝屏死机。所以我也安装了一个自己的Hard Fault handler

ISR(HardFault_Handler)

    while (1) 
    

此外,可通过暂停在调试模式下检测到。续集当然是what causes a Hard Fault?我猜是内存擦除或无限递归。

【讨论】:

以上是关于Atmel Studio Dummy_Handler的主要内容,如果未能解决你的问题,请参考以下文章

Atmel Studio 烧录 Atmega328P(Arduiono)

系统调用在 Atmel AVR Studio(使用 ASF)中不起作用

Atmel Studio 中的 Arduino 产量

Win7补丁更新失败导致Atmel studio软件安装失败,如何解决?

ATMEL AVR STUDIO 程序

ATMEL Studio 添加自己的库