roboforum.ru

Технический форум по робототехнике.

Ожидание событий в контроллере...

Ожидание событий в контроллере...

Виталий » 11 дек 2004, 00:50

Есть контроллер MEGA16.
Есть функция, которая должна дождаться выполнения прерывания. Как это сделать? Мое предложение такое...

volatile unsigned char val=0;

void function()
{
...
while(!val); //<------------- Ожидание.
...
}

INTERRUPT
{
   val = 1;
}

Это единственный способ?

setar » 15 дек 2004, 15:21

Брр я не очень силён в Си но ожидать прерывания не нужно!

На то и есть оно чтобы по нему направить прогу на отработку.

вот пример на ASM :

Код: Выделить всёРазвернуть
.org T0OVaddr                     ; Вектор прерывания по переполнению таймера0
rjmp start_pwm
.........



sei                           ; Разрешение глобальных прерываний

;Основной цикл.

idle:
   ldi r16, (1<<SE)               ; Enable sleep
   out MCUCR, r16
   sleep
   NOP
   rjmp idle



start_pwm:
.........




А вообще если задача стоит именно так что функция в процессе выполнения должна дождаться выполнения прерывания то активную её часть выделяем в другую функцию, вход в которую делаем по флагу отработки прерывания.
А зацикливать на пустом месте - не правильно.

Другими словами есть основной цикл просмотра флагов - что делать а что нет.

Виталий » 15 дек 2004, 18:16

А почему плохо-то?

setar » 16 дек 2004, 15:21

плохо потому что ничего не делаем, а энергию кушаем!
к тому же если прерывание не произойдёт можно подвиснуть ;)
да и правильнее просто пробегать циклично по всем задачам и смотреть требуют они внимания или пока нет.
Так сказать многозадачтость выше.


Rambler\'s Top100 Mail.ru counter