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

 
 
> Значение переменной
vv_gulyaev
сообщение Oct 15 2009, 07:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984



Есть глобальная переменная flag. В начале работы ей присваивается значение ноль. По прерыванию ей присваивается значение 1. Однако при возвращении в основную программу она воспринимается как ноль, при этом в дебагере ее значение равно 1. В чем проблема не могу понять.
Использую среду разработки AVR Studio.
Код
int flag;

void init(void)
{
    DDRB = 0xFB;//set direction of pins
    PORTB = 0xFC;//set default value of pins

    GIMSK = 0x40;//external pin interrupt is enabled
    MCUCR = 0x00;
    sei();

    flag = 0;
}

ISR(INT0_vect)//handle of interruption
{
    if (flag==0){
        flag = 1;
    }
}

int main(void){

    int i;

    init();

    while(1){
        if (!flag){
                   //что-то делается
        };
    };
};


Сообщение отредактировал vv_gulyaev - Oct 15 2009, 07:45
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vv_gulyaev
сообщение Oct 15 2009, 08:56
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984



Спасибо.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 15 2009, 16:23
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Этого мало! Прочитайте обязательно о critical sections и об атомарных операциях.
Иначе долго будете плясать с бубном и дебагером...
hint: atomic.h


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:44
Рейтинг@Mail.ru


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