处理内核中断 zynq 7020

问题描述 投票:0回答:1

我正在尝试处理内核中断 cortex-A9 处理器,freeRTOS 操作系统

我尝试使用以下结构捕获此中断:

void __attribute__ ((interrupt ("IRQInterrupt")))

我还尝试覆盖标准处理程序

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT, (Xil_ExceptionHandler)test_hendler,(void *) 0);

我通过将值写入不存在的地址来发起中断

我的任务是完全控制系统并能够处理所有中断,使程序不会进入死循环

zynq 7020.vitis 2020.2

c zynq vitis
1个回答
0
投票

ARMv7 处理器中有多种类型的中断(参见 ARMv7 类型的异常

在您的情况下,您只将处理程序注册到IRQ中断,但您尝试通过生成错误的内存访问来触发它,这将导致数据中止而不是IRQ

使用单个自定义处理程序完全控制所有中断是可能的,但有很多限制,因为可能很难或不可能检测发生了什么异常。在 ARMv7 上,每种异常类型都有自己特定的寄存器映射和其他机制。单个处理程序无法决定每种类型中断的操作。例如,Data Abort 的处理程序通常使用两个特定寄存器:DFSRDFAR

除此之外,FreeRTOS还依赖于通过IRQ(或者可能是FIQ)的定时器中断。如果您在第一个异常间接级别注册自定义处理程序(在向量表中,就像您在此处所做的那样),则必须确保它将调用系统期望的处理程序来工作。对于 FreeRTOS/ZYNQ,它通常应该是 GIC IRQ 处理程序。

顺便说一句,您尝试触发它并提到避免无限循环,看起来您确实可能有一个项目有时会触发数据中止,并且您希望避免仅包含断言的默认处理程序,从而导致无限while (1)。这个默认处理程序是为了让您只需插入 JTAG 探针和 GDB 即可轻松查看导致错误内存访问的地址。但通常希望自定义处理程序报告数据错误并最终执行操作(例如终止错误任务)。

如果这就是您正在寻找的内容,我鼓励您了解有关 ARMv7 上的数据中止处理的更多信息,并阅读 ARMv7 TRM 有关异常处理的内容。

© www.soinside.com 2019 - 2024. All rights reserved.