Метценгерштейн 0 3 января, 2015 Опубликовано 3 января, 2015 · Жалоба или торможу после праздников )) не выполняется первое условие 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 0 3 января, 2015 Опубликовано 3 января, 2015 · Жалоба Side-эффект от вызова signal(Str_0)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 3 января, 2015 Опубликовано 3 января, 2015 · Жалоба это макрос Аскольда- всегда так пины проверялись. Так что не должно быть. Да и не объясняет, почему только первую if не выполняет. PS комп перегрузил, различные оптимизации кода и без них- эффект тот же. Разгадка в том, что надо было выставить небольшую задержку перед первым if. Вероятно, фронт не успевал упасть в ноль, а только ко второй проверке сигнал формировался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 3 января, 2015 Опубликовано 3 января, 2015 · Жалоба можно попробовать что-то типа: { 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 3 января, 2015 Опубликовано 3 января, 2015 · Жалоба Не видя дизассемблера гадать бессмысленно. Приведенный код вполне легальный, проблема где-то в другом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться