Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Значение переменной
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
vv_gulyaev
Есть глобальная переменная 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, 10:44) *
В чем проблема не могу понять.
Об этом не раз говорилось. Посмотрите спецификатор volatile.
rezident
Вы забыли добавить при объявлении квалификатор volatile.
Код
volatile int flag;
vv_gulyaev
Спасибо.
demiurg_spb
Этого мало! Прочитайте обязательно о critical sections и об атомарных операциях.
Иначе долго будете плясать с бубном и дебагером...
hint: atomic.h
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.