[an error occurred while processing this directive] [an error occurred while processing this directive]
(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Papa Innokenty IV 03 апреля 2002 г. 17:33
В ответ на: У меня потребность в GOTO обычно возникает при.. отправлено Baser 03 апреля 2002 г. 17:05

Использовать 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