PeterBeklemishev / mila

Arduino alternative based on MILANDR processor
6 stars 0 forks source link

Что делать, если пользователь дурак? #27

Open ReDetection opened 9 years ago

ReDetection commented 9 years ago

Допустим, он вызвал pinInit с несуществущей ногой, а мы задетектили это, но уже во время выполнения. Если продолжить выполнение, то плюсов нет, имхо — затруднится поиск ошибки, да и пользователь вообще может не заметить, что сделал что-то не так. Если остановить выполнение, то ему придётся разобраться, почему же программа перестала работать. Ещё можно какой-нибудь служебный светодиод подсветить, например.

Какие ещё аспекты и варианты действитй есть?

PeterBeklemishev commented 9 years ago

А мб ну уровне препроцессора проверять? и аровде в ардуино всем пофиг какую ногу ты используешь

ReDetection commented 9 years ago

бывает, когда мы не знаем на стадии препроцессинга. например, если в pinWrite пришла переменная, а во время выполнения там может оказаться -100 или 12345, например.

vdudouyt commented 9 years ago

Ты же не собираешься добавлять в pinWrite проверку на валидность ноги, да?

ReDetection commented 9 years ago

Я не хочу делать никаких предварительных проверок, это будет пустая трата тактов процессора. Однако, из функции port_from_pin при невалидной ноге вернётся невесть что, и об этом верно рапортует компилятор. Если такое произойдёт, результат непредсказуем и отладка сильно затруднена.

Мне кажется, разумным решением будет в качестве default-значения в switch сделать бесконечный цикл, остановив выполнение программы за пару инструций. Т.е. при валидных ногах лишние такты не потратятся, а при невалидной юзер увидит, что что-то пошло не так и станет искать косяк.

PeterBeklemishev commented 9 years ago

выделить ногу под светодиод (как в ардуине 13 пин) и потом вымаргивать им коды ошибок - можно наверное

dubkov commented 9 years ago

@ReDetection попробуй в ардуино сделать, скажем, analogRead(A8)

ReDetection commented 9 years ago

считает с другого пина, вроде?

dubkov commented 9 years ago

считает с другого пина, вроде?

Нет, компилятор скажет, что не знает, что такое А8.

Это в случае UNO. У МЕГИ есть А8, поэтому проблем не будет.

PeterBeklemishev commented 9 years ago

Нууу, конечно

Я тока что скомпилил блинк на 130 пине)

Отправлено из мобильной Почты Mail.Ru понедельник, 02 февраля 2015г., 10:46 +06:00 от Илья Дубков notifications@github.com:

считает с другого пина, вроде? Нет, компилятор скажет, что не знает, что такое А8 — Reply to this email directly or  view it on GitHub .

dubkov commented 9 years ago

Нууу, конечно Я тока что скомпилил блинк на 130 пине)

Да. я писал про АЦП. С цифровыми пинами интереснее. Там есть проверка

if (port == NOT_A_PIN) return;

но она ничего не дает: если сделать pinMode(130,OUTPUT), то для определения порта, таймера и бита прочитаются 130-е ячейки памяти относительно начальной. а там содержится другой шлак, поэтому работа абсолютно непредсказуема.