我正在使用 Microchip C18 编译器,并且在发生中断时,我在 ISR 代码开始运行之前经历了相当长的延迟。
作为一个实验,这是我的主要功能:
while(1)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
作为中断处理程序,我使用从一些示例复制的代码(我不知道为什么这样做):
#pragma interrupt high_isr
void high_isr(void)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
我正在通过 SPI 接收字节,收到字节后不久,主循环就会停止。然后,在 ISR 代码开始运行之前,会延迟 16.5 µs。那是 165 个指令周期!
我知道有一些与中断相关的上下文保存,并且对于低优先级中断来说情况更糟。我已禁用 IPEN 并且仅使用高优先级向量。 165 条指令是上下文保存的正常持续时间吗?
最佳答案
在某些情况下,中断开销可能和您一样大!
看看this .
关于microcontroller - Microchip C18 上的正常中断延迟和上下文保存时间是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417351/