Есть ли способ имитировать запуск программы перед записью на доску?

24

Программы могут иногда иметь ошибки во время выполнения. Иногда их трудно найти, и их легко можно пропустить. Есть ли способ протестировать программу перед тем, как записать ее на плату?

asheeshr
источник
Может быть связано с arduino.stackexchange.com/q/84/25
Powtac
Также может быть связано с arduino.stackexchange.com/questions/20/…
У вас может быть проблема, ошибка возникает только на физическом Arduino (хотя я не могу привести пример).
Полярный
@Polar С точки зрения логики программы, я не могу себе представить, как. Не могли бы вы опубликовать какой-нибудь пример?
asheeshr

Ответы:

19

Есть несколько проектов Arduino Simulator.

Возможно, одним из наиболее зрелых из них является Virtronics Simulator для Arduino , видео на YouTube здесь .

Virtronics Arduino Simulator

На приведенной выше странице Virtronics также перечислены несколько других симуляторов Arduino, как бесплатных, так и платных.

Учитывая интерес, который вызывает Arduino, таких симуляторов, вероятно, будет гораздо больше, поэтому нет смысла пытаться перечислить их все в ответе здесь.

Стоит отметить, что есть также приложение для iPhone от Arduino Simulator : это не рекомендация, еще не увидев его в работе.


На примечании стороны:

Arduino сам по себе является макетом для экспериментов. Он идеально подходит для программирования экспериментального кода, его отладки, изменения, а затем перепрошивки свежего кода - столько раз, сколько нужно . Если код зависает, перезагрузите и перепрошейте с любыми изменениями.

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

Если стоимость Arduino является проблемой, есть несколько открытых вариантов:

  • Недорогие Arduino Nano клонируют с eBay - у меня есть несколько плат Meduino Nano Enhancement , они отлично работают и стоят по цене менее $ 10, включая доставку по всему миру: Meduino Nano Enhancement
  • Создайте свой собственный Arduino - сайт Arduino поможет вам сделать его на макете , который вам даже не понадобится паять!
Аниндо Гош
источник
Спасибо, что поделились ссылкой на симулятор Virtronics!
Powtac
Да, гораздо проще отлаживать и перепрошивать. Флэш-память ATMega328 рассчитана на 10000 циклов перезаписи, поэтому даже если вы перезаписываете ее по 10 раз каждый день, у вас будет более двух лет веселья перед вами :-) Для любителя это очень весело. Если вы немного больше разбираетесь в этом, вы можете использовать более новые платы для отладки, а когда они начинают изнашиваться (скажем, после 5000 циклов?), Вы можете использовать их для стабильных приложений или купить новую для отладки.
Лоренцо Донати поддерживает Монику
8

Вы можете найти ошибки времени выполнения, если вы можете вручную пройтись по программе с подключенным Arduino и отладкой ( после загрузки кода в Arduino). Это доступно в Visual Micro, хотя для этого требуется Visual Studio. Вы можете установить точки останова, оценить переменные и изменить значения переменных. Вы также можете получить визуализацию памяти с течением времени:

введите описание изображения здесь


источник
Очень аккуратный. Насколько зрел этот проект - или, скорее, этот IDE прошел гладко в вашем опыте?
прикус
Я не использовал его для профилирования, и я использовал его только кратко, но он довольно хорошо интегрируется и отлично работает для меня. Я действительно ценю возможность отладки, не прибегая к Serial.print
4

Один из способов сделать это - создать программу-обертку для реального кода, которая имитирует все входные данные и принимает выходные данные (создавая тем самым цикл обратной связи) в соответствии с реальной средой. Это потребует различного количества усилий в зависимости от типа программы, степени тестирования и количества входов.

Имейте в виду, что при написании программы-оболочки вы должны следовать подходу черного ящика .

введите описание изображения здесь

В противном случае, ваш внешний код не может протестировать программу , а также , насколько это возможно , как имея в виду фактический код при создании тестового кода может смещения игнорировать граничные случаи или проблемные области (Это наблюдалось случиться, делая White-Box Testing , который это альтернатива).

asheeshr
источник
Вы знаете какие-нибудь примеры? Большая часть кода Arduino, который я видел, не содержит надлежащих модульных тестов даже для частей, которые не требуют ввода / вывода.
Якоб
@ Якоб Я обычно пишу свой собственный код для тестирования. Это практично для небольших проектов.
asheeshr