Перейти к содержанию
    

странное поведение else if

или торможу после праздников ))

 

не выполняется первое условие 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это макрос Аскольда- всегда так пины проверялись. Так что не должно быть.

Да и не объясняет, почему только первую if не выполняет.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно попробовать что-то типа:

 

{
    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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не видя дизассемблера гадать бессмысленно. Приведенный код вполне легальный, проблема где-то в другом месте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...