C 我必须在一次中断时禁用中断吗?
如果我在微芯片C18上使用多个中断,我是否必须在一个内部禁用高中断 考虑以下代码:C 我必须在一次中断时禁用中断吗?,c,interrupt,pic,microchip,C,Interrupt,Pic,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()
#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
我应该遵循下面代码中的相同方法吗?(然后我会将禁用项放在函数中的适当位置。)
这取决于硬件。某些处理器在维护中断时自动禁用中断。其他人对中断进行优先级排序,以便在为较低优先级的中断提供服务时,仍然可以发生较高优先级的中断
该系列微控制器具有多个级别的硬件中断,并且可以选择优先顺序。hm。。。。这是高中断内的代码,两个功能优先级相同。我还有一个pragma->#pragma LowInterruptHandler。。。。。。。。或者可能我搞错了,所以flow和stepper的优先级不同。
#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