我需要禁用中断吗?

4

如果我在Microchip C18上使用多个中断,当我进入其中之一时,是否需要禁用高优先级中断?

请考虑以下代码:

#ifndef OTHER_INTERRUPT_H
#pragma interrupt InterruptHook // interrupt fname
void InterruptHook(void)
{
    #ifdef STEPPER_H
        Stepper_Interrupt();
    #endif

    #ifdef FLOW_H
        Flow_Interrupt();
    #endif
}
#endif

我应该按照下面代码中的相同方法吗?(然后我会在函数内适当位置放置禁用。)
#ifndef OTHER_INTERRUPT_H
#pragma interrupt InterruptHook // interrupt fname
void InterruptHook(void)
{
    #ifdef STEPPER_H
        INTCONbits.GIEH = 0;
        Stepper_Interrupt();
        INTCONbits.GIEH = 1;
    #endif

    #ifdef FLOW_H
        INTCONbits.GIEH = 0;    
        Flow_Interrupt();
        INTCONbits.GIEH = 1;
    #endif
}
#endif
1个回答

2

这取决于硬件。一些处理器在服务一个中断时会自动禁用其他中断。而其他处理器则会优先处理高优先级的中断,这样在处理低优先级中断时仍然可以发生更高优先级的中断。

Microchip PIC18 系列微控制器具有多级硬件中断,并且它们也可以选择性地进行优先级排序。


嗯......这是在高中断内部的代码,两个函数具有相同的优先级。我还有一个#pragma lowinterrupt InterruptHandler……或者我可能理解错了,因此flow和stepper在优先级上有所不同。 - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接