英飞凌
直播中

那些年儿ing

12年用户 1308经验值
擅长:84784
私信 关注

如何在不同优先级安装相同的处理程序?

IFX_INTERRUPT(OS_CAT2_General_Handler,0,6);
IFX_INTERRUPT(OS_CAT2_General_Handler,0,5);

为什么我不能在不同的优先级中安装相同的处理程序? 我需要一个解决方案,在不同的优先级中安装相同的处理程序(ISR),以便在我的项目中处理 CAT2 中断,但我不能上传项目,因为我签署了 NDA。

回帖(1)

茶缸子

2024-5-28 16:04:35
在不同优先级安装相同的处理程序可能会导致一些问题,因为中断处理程序(ISR)是按照优先级顺序执行的。如果相同的处理程序在不同的优先级上注册,较低优先级的中断可能会被较高优先级的中断覆盖,导致中断处理不正确。

为了解决这个问题,您可以采取以下步骤:

1. 创建一个通用的中断处理函数,该函数可以处理所有CAT2中断。在这个函数中,您可以使用一个变量(例如:interrupt_type)来区分不同类型的中断。

```c
void General_ISR(void) {
    if (interrupt_type == 1) {
        // 处理中断类型1
    } else if (interrupt_type == 2) {
        // 处理中断类型2
    }
    // ... 其他中断类型
}
```

2. 在中断类型1和中断类型2的ISR中,设置interrupt_type变量,并调用通用的中断处理函数。

```c
void ISR_Type1(void) {
    interrupt_type = 1;
    General_ISR();
}

void ISR_Type2(void) {
    interrupt_type = 2;
    General_ISR();
}
```

3. 使用IFX_INTERRUPT宏在不同的优先级上注册ISR_Type1和ISR_Type2。

```c
IFX_INTERRUPT(ISR_Type1, 0, 6);
IFX_INTERRUPT(ISR_Type2, 0, 5);
```

这样,您可以在不同的优先级上安装相同的处理程序,同时确保每个中断类型都能被正确处理。请注意,这种方法可能会导致中断处理的复杂性增加,因此请确保在实现时仔细考虑各种中断类型之间的交互。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分