Argon (03.01.2018 19:31, просмотров: 281) ответил IBAH на пропуска не будет, т.к. флаги сбрасываются только ручками, все не как людей :)
Ой, не уверен... else if исключает проверку прочих событий в этом цикле, оставляя на потом. А что если скорость поступления всех событий высока и пока выполняется первый обработчик, пришло событие второго?
Я бы вообще написал
if(PIE1bits.TX1IE) if(PIR1bits.TX1IF) EUSART1_TxDefaultInterruptHandler();
if(PIE1bits.RC1IE) if(PIR1bits.RC1IF) EUSART1_RxDefaultInterruptHandler();
if(PIE4bits.TMR4IE) if(PIR4bits.TMR4IF) TMR4_ISR();
else
{
//Unhandled Interrupt
}
Здесь кроме того, что else if заменено на просто if, еще убрано и &&, т.е. проверка одновременной активности IE и IF, т.к. не нужна. У PICов такие блохи вполне могут влиять на результат, например, частотоизмерительных алгоритмов.