Ви не увійшли.
Скорее условие set[8] == 1 должно быть ложным тогда лентяйство засчитывается...
Да, конечно, больно быстро писал. Но идею-то ты понял - для того и писалось.
renoshnik пише:" если ее переделать на if ((set[8] == 1) && (alarm != 0)) тогда тоже этого глюка нет " как это объяснить ?
Элементарно, Ватсон. ТС не уточнил, но очевидно что глюка нет не всегда, а тогда, когда set[8] == 1 истинно (видимо, при его тесте так и было). Тогда вторая часть условия (после &&) вообще не проверяется. Это т.н. "ленивая логика"
... такую ленность я бы понял при условии ИЛИ но там условие И
Скорее условие set[8] == 1 должно быть ложным тогда лентяйство засчитывается...
Green пише:Там не 9 надо, а sizeof(set).
Ну, уж если по гамбургскому, то там надо sizeof(set)/sizeof(set[0])
Там вообще каличная EEPROM, которая читает байтами!
" если ее переделать на if ((set[8] == 1) && (alarm != 0)) тогда тоже этого глюка нет " как это объяснить ?
Элементарно, Ватсон. ТС не уточнил, но очевидно что глюка нет не всегда, а тогда, когда set[8] == 1 истинно (видимо, при его тесте так и было). Тогда вторая часть условия (после &&) вообще не проверяется. Это т.н. "ленивая логика"
Там не 9 надо, а sizeof(set).
Ну, уж если по гамбургскому, то там надо sizeof(set)/sizeof(set[0])
Вячеслав Азаров пише:Vitalik_sce пише:... В чем проблема?
В С нет проверки границ массивов. У вас массив размерности 9 а пишите вы 10 значений. 10-е значение массива попадает на область памяти переменной alarm.
" если ее переделать на if ((set[8] == 1) && (alarm != 0)) тогда тоже этого глюка нет " как это объяснить ?
Это так кажется. Он проявится, потом, на другом состоянии данных.
Vitalik_sce пише:... В чем проблема?
В С нет проверки границ массивов. У вас массив размерности 9 а пишите вы 10 значений. 10-е значение массива попадает на область памяти переменной alarm.
" если ее переделать на if ((set[8] == 1) && (alarm != 0)) тогда тоже этого глюка нет " как это объяснить ?
... В чем проблема?
В С нет проверки границ массивов. У вас массив размерности 9 а пишите вы 10 значений. 10-е значение массива попадает на область памяти переменной alarm.
Понятно, что чтение из памяти кривокосячное. Но как оно влияет на переменную alarm о которой спрашивает ТС.
Там не 9 надо, а sizeof(set). Только это офигенно сложно. И не только для чайников.)))
Если уж у тебя set[9], так и пиши в цикле <9, чего ты <10 вляпал?
Из еепром считывается больше размера массива.
Руки бы поотрывать за такую писанину.
Проверь строку 127 .
Здравствуйте
Когда выполняется функция save_set(); значение переменной alarm встает в 255
Если убрать проверку if ((alarm != 0) && (set[8] == 1)) тогда работает верно
если ее переделать на if ((set[8] == 1) && (alarm != 0)) тогда тоже этого глюка нет
В чем проблема?
volatile int set[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
volatile int alarm = 0;
/*
....
*/
void setup()
{
/*
....
*/
save_set();
}//setup
void turnbip_call(int turnbip_num, int turnbip_long, int turnp_cou)
{
if (!turnb_s)
{
turnb_n = turnbip_num;
turnb_l = turnbip_long;
turnb_c = ((turnb_l * 2) * turnb_n);
turnp_c = turnp_cou;
digitalWrite(turns_pin, LOW);
if ((alarm != 0) && (set[8] == 1)) {digitalWrite(sirena_pin, LOW); }
}
}
void save_set()
{
for (int i = 0; i < 10; i++)
{set[i] = EEPROM.read(31+i);}
}
void loop ()
{
/*
....
*/
}