Существуют ли какие-либо стандартные способы сообщения об ошибке времени выполнения?

programming coding-standards

Я новичок в Arduino, но я опытный программист. Мне интересно, есть ли какие-либо общие функции для сообщения об ошибках в программах Arduino? Например, в JavaScript у нас есть функция alert(), а в Unix вы можете написать сообщение в стандартную ошибку и выйти.

В идеале, если последовательный порт доступен, то там должно быть напечатано сообщение об ошибке, а если есть светодиод, то, возможно, мы должны мигнуть им. Это должно быть настроено в зависимости от того, что программист хочет делать с доступным оборудованием.

Глядя на примеры скетчей, отчеты об ошибках кажутся ужасными. Мне интересно, справляются ли с этим какие-либо библиотеки лучше?

, 👍1

Обсуждение

То, как вы сообщаете об ошибке, полностью зависит от того, какие каналы связи у вас есть и какие сообщения об ошибках подходят для вашего проекта. Не может быть «стандарта», так как каждый дизайн отличается. Добро пожаловать в мир встраиваемых систем. Когда у вас нет ОС, экрана и клавиатуры, вам приходится обходиться теми ресурсами, которые у вас есть., @Majenko

Я сам прибегал к миганию светодиода азбукой Морзе для обозначения различных состояний ошибки., @Majenko

Я не вижу причин, по которым не может быть стандартного вызова макроса, который библиотеки используют для установки условия ошибки. (Реализация по умолчанию может быть неактивной.) Я думаю, ее не существует?, @Brian Slesinsky


1 ответ


1

Как отметил Маженко в комментарии, вы вряд ли сможете определить стандарт средство для сообщения об ошибках, когда вы не знаете, какой тип ввода-вывода оборудование будет доступно для любого конкретного проекта. Печать на последовательный порт является наиболее распространенным методом, поскольку он всегда доступны на этапе разработки, в то время как Arduino привязан к компьютер разработки. Лично я обычно делаю что-то вроде

Serial.println(F("Error: the warp field coil is busted."));

и соответствовать префиксу ошибки, чтобы программа, получающая это может сказать, что это ошибка, сопоставив строку с /^Error: /.

Хотя это нормально для пользовательского кода, сообщения об ошибках через Serial конечно, не хорошая практика для библиотечного кода. Увы, так делается слишком часто в библиотеках Arduino. Я видел как минимум одну библиотеку (не запомнить какой), который позволяет пользователю предоставить ссылку на Объект Print (по умолчанию Serial), который будет использоваться для этой цели. Это намного лучше, так как позволяет пользователю обрабатывать сообщения об ошибках. любым путем, который она выберет. Также очень легко отключить ошибку отчетность путем реализации функции Print, которая не требует никаких действий. быть своего рода /dev/null.

Обратите внимание, что avr-libc позволяет печатать в stderr , пока как вы впервые реализовали stderr->put... Хотя этот метод является ближе всего к стандартам, к которым вы привыкли, это может быть не переносим на не-AVR Arduino. И стоит отметить, что мы склонны избегайте семейства функций printf() на Arduino, поскольку они, как правило, довольно большой по сравнению с методами print() и println().

,