[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Использовать goto есть очень не хорошо. Для одинаковых кусков кода надо использовать ф-и, а для условных переходов - if/switch.
Мне всегда вполне хватало if & switch. У меня проект на ~500 кБ в котором ~20 goto, которые используются только для обработки исключений (что-то вроде try/catch в C++).
Есть такие размышления.
Вместо такой горы if'ов (при большом к-ве) можно сделать через switch:
#define get_interrupt_type() (((TXIE)&&(TXIF)) << 2) + (((TMR1IE) && (TMR1IF)) << 1) + RCIF
switch(get_interrupt_type())
{
case 1: //RCIF - приоритет 0
case 3:
case 5:
case 7:
break;
case 2: //(TMR1IE) && (TMR1IF) - приоритет 1
case 6:
break;
case 4:
break;
case 8: // (TXIE)&&(TXIF) - приоритет 2
break;
}
Такая штука должна замениться на таблицу переходов на нужную ф-ю.
Это уберет кучу проверок при if'ах. Любой обработчик будет вызываться с одинаковой скоростью.
Еще можно засунуть это все в while.
E-mail: info@telesys.ru