Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: странное поведение else if
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Метценгерштейн
или торможу после праздников ))

не выполняется первое условие if

Код
        if (signal(Str_1))
    {
          return key_mass[0][0];
    }
        else if (signal(Str_2))
    {
          return key_mass[0][1];
    }

работаю с матричной клавиатурой.
в такой записи в упор не печатает цифру 1- это как раз строка 1- первое условие.

зато так:
Код
       if (signal(Str_0))
    {
          on (LED_Red);
    }
        else if (signal(Str_1))
    {
          return key_mass[0][0];
    }
        else if (signal(Str_2))
    {
          return key_mass[0][1];
    }

печатает и 1 и 4.
тут мы ему подсунули как if нечто ненужное.

Т.е. почему код начинает работать только со второй строки else if?
des333
Side-эффект от вызова signal(Str_0)?
Метценгерштейн
это макрос Аскольда- всегда так пины проверялись. Так что не должно быть.
Да и не объясняет, почему только первую if не выполняет.

PS комп перегрузил, различные оптимизации кода и без них- эффект тот же.

Разгадка в том, что надо было выставить небольшую задержку перед первым if. Вероятно, фронт не успевал упасть в ноль, а только ко второй проверке сигнал формировался.
psL
можно попробовать что-то типа:

Код
{
    int res=0;

    if (signal(Str_1))
    {
          res=key_mass[0][0];
    }
        else if (signal(Str_2))
    {
          res=key_mass[0][1];
    }

    return res;
}

или даже volatile res
Сергей Борщ
Не видя дизассемблера гадать бессмысленно. Приведенный код вполне легальный, проблема где-то в другом месте.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.