[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]

Отправлено AlexD 22 апреля 2002 г. 19:25
В ответ на: Где ставить ? отправлено proxy 22 апреля 2002 г. 16:05

Я не знаю структуры Вашей программы, но предположу,
что бОльшую часть времени прога находится в разных
циклах в ожидании событий.

В этом случае все циклы необходимо "вскрыть", а логику
программы представить в виде машины состояний.

Простой пример.
Предположим, что по ходу программы необходимы
точные выдержки времени. Наиболее типичное решение
в таком случае примерно такое:

volatile char tim;
// прерывание по таймеру
void timer0(void){
if (tim) tim--;
}

void main(void){
// супер луп
while(1) {
// bla-bla-bla
// ...
tim=20; // mS например
while(tim);
// ...
// bla-bla-bla
}

}

Понятно, что основной цикл в этом случае
на это время не способен реагировать на
изменение ситуации.

Выход может быть следующим:

char state;

volatile char tim;
// прерывание по таймеру
void timer0(void){
if (tim) tim--;
}

void main(void){
// супер луп
while(1) {
if (new_data) {
// выставился флаг новых данных
state=0;
}
swith (state) {
case 0 :
// bla-bla-bla
// ...
tim=20; // mS например
state=1;
break;
case 1 :
if (tim) state=2;
break;
case 2 :
// ...
// bla-bla-bla
}
}
}

В этом случае супер-луп молотит постоянно, и у Вас есть
возможность вмешаться в ход процесса в любой момент и из
любого места.

Возможно, это потребует вывернуть своё сознание наизнанку,
но ничего, оно того стоит :-). Нужно только проанализировать
все места, где программа может "застрять".

PS Пример НАМЕРЕННО упрощён.
PS Если я излагаю нечто тривиальное, то заранее извиняюсь,
я ведь не знаю Вашей подготовки.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru