gpt4 book ai didi

exception-handling - Atmel Studio Dummy_Handler

转载 作者:行者123 更新时间:2023-12-04 14:00:59 33 4
gpt4 key购买 nike

偶尔会遇到意外中断,我的代码会卡在里面Dummy_Handler() exceptions.c Atmel Studio 框架 (ASF)。我正在使用 Arduino Due 的 ATSAM3X8E 微 Controller 。

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")));

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

最佳答案

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

uint32_t phantomISR = 9999;

void Dummy_Handler(void)
{
while(1) {
phantomISR = __get_IPSR();
}
}

然后可以在运行时监视这个全局变量。 (在我的例子中,我暂停了这个死循环的汇编代码,并在 R3 寄存器中看到了值 3。)Atmel MCU 文档解释了它的值:
ISR_NUMBERThis is the number of the current exception:0 = Thread mode1 = Reserved2 = NMI3 = Hard fault4 = Memory management fault5 = Bus fault6 = Usage fault7-10 = Reserved11 = SVCall12 = Reserved for Debug13 = Reserved14 = PendSV15 = SysTick16 = IRQ045 = IRQ29

Both times this happened to me it was the Hard Fault, a kind of blue-screen-of-death for the Ardunio Due. So I also installed a Hard Fault handler of my own.

ISR(HardFault_Handler)
{
while (1) {
}
}

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

关于exception-handling - Atmel Studio Dummy_Handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293580/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com