Open ReDetection opened 9 years ago
А мб ну уровне препроцессора проверять? и аровде в ардуино всем пофиг какую ногу ты используешь
бывает, когда мы не знаем на стадии препроцессинга. например, если в pinWrite
пришла переменная, а во время выполнения там может оказаться -100
или 12345
, например.
Ты же не собираешься добавлять в pinWrite проверку на валидность ноги, да?
Я не хочу делать никаких предварительных проверок, это будет пустая трата тактов процессора. Однако, из функции port_from_pin при невалидной ноге вернётся невесть что, и об этом верно рапортует компилятор. Если такое произойдёт, результат непредсказуем и отладка сильно затруднена.
Мне кажется, разумным решением будет в качестве default
-значения в switch
сделать бесконечный цикл, остановив выполнение программы за пару инструций. Т.е. при валидных ногах лишние такты не потратятся, а при невалидной юзер увидит, что что-то пошло не так и станет искать косяк.
выделить ногу под светодиод (как в ардуине 13 пин) и потом вымаргивать им коды ошибок - можно наверное
@ReDetection попробуй в ардуино сделать, скажем, analogRead(A8)
считает с другого пина, вроде?
считает с другого пина, вроде?
Нет, компилятор скажет, что не знает, что такое А8.
Это в случае UNO. У МЕГИ есть А8, поэтому проблем не будет.
Нууу, конечно
Отправлено из мобильной Почты Mail.Ru понедельник, 02 февраля 2015г., 10:46 +06:00 от Илья Дубков notifications@github.com:
считает с другого пина, вроде? Нет, компилятор скажет, что не знает, что такое А8 — Reply to this email directly or view it on GitHub .
Нууу, конечно Я тока что скомпилил блинк на 130 пине)
Да. я писал про АЦП. С цифровыми пинами интереснее. Там есть проверка
if (port == NOT_A_PIN) return;
но она ничего не дает: если сделать pinMode(130,OUTPUT)
, то для определения порта, таймера и бита прочитаются 130-е ячейки памяти относительно начальной. а там содержится другой шлак, поэтому работа абсолютно непредсказуема.
Допустим, он вызвал
pinInit
с несуществущей ногой, а мы задетектили это, но уже во время выполнения. Если продолжить выполнение, то плюсов нет, имхо — затруднится поиск ошибки, да и пользователь вообще может не заметить, что сделал что-то не так. Если остановить выполнение, то ему придётся разобраться, почему же программа перестала работать. Ещё можно какой-нибудь служебный светодиод подсветить, например.Какие ещё аспекты и варианты действитй есть?