реклама на сайте
подробности

 
 
> avr проблемы с volatile переменной
mjpronin
сообщение Oct 5 2011, 18:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 26-01-10
Пользователь №: 55 071



Здравствуйте! Доброго Вам времени суток.

Помогите, пожалуйста, разобраться с проблемой. Необходимо использовать переменную, которая может быть изменена как по ходу программы, так и в прерывании. Думаю, многие уже воскликнули: просто он забыл объявить её как volatile, вот и мучается. Нет, не забыл, но почему-то всё происходит, как будто контроллер не замечает её изменения.

Я думаю, должно быть так: сначала «b» пока нет прирывания, потом один раз «а» и опять «b» пока опять не будет прерывание. А получается сначала «b», после прерывания «а» «b». Думаю, я что-то напутал.

Код
#define WORK 1
#define SEND 2
volatile char answer = WORK;

int main ()
{
    sei();    

    while (1)
        {
                   
            printf("b\n");

            if(answer == SEND)
                                       {
        
                                         printf("a\n");
                                         answer = WORK;        
        
                                        }
                        
        };
    
    return 0;
}

ISR(USART_RXC_vect)
{
              answer = SEND;        
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Oct 5 2011, 19:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Читаем DS:
Цитата
RXC: USART Receive Complete
This flag bit is set when there are unread data in the receive buffer and cleared when the receive
buffer is empty (i.e., does not contain any unread data).

Для сброса флага кто приемный буфер опустошать будет?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 11:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016