roboforum.ru

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

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение Виталий » 11 дек 2004, 00:50

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

volatile unsigned char val=0;

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

INTERRUPT
{
   val = 1;
}

Это единственный способ?
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Сообщение 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:
.........




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

Другими словами есть основной цикл просмотра флагов - что делать а что нет.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение Виталий » 15 дек 2004, 18:16

А почему плохо-то?
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Сообщение setar » 16 дек 2004, 15:21

плохо потому что ничего не делаем, а энергию кушаем!
к тому же если прерывание не произойдёт можно подвиснуть ;)
да и правильнее просто пробегать циклично по всем задачам и смотреть требуют они внимания или пока нет.
Так сказать многозадачтость выше.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15