Czy jest jakiś sposób na symulację uruchomienia programu przed wypaleniem go na płycie?

24

Czasami programy mogą mieć błędy w czasie wykonywania. Czasami są trudne do znalezienia i można je łatwo przeoczyć. Czy jest jakiś sposób przetestowania programu przed wypaleniem go na płycie?

asheeshr
źródło
Może być powiązany z arduino.stackexchange.com/q/84/25
powtac
Być może masz problem, że błąd występuje tylko na fizycznym Arduino (nie mogłem jednak podać przykładu).
Polar
@Polar Jeśli chodzi o logikę programu, nie wyobrażam sobie, jak to zrobić. Czy mógłbyś podać jakiś przykład?
asheeshr

Odpowiedzi:

19

Istnieje kilka projektów Arduino Simulator.

Być może jednym z bardziej dojrzałych jest Virtronics Simulator for Arduino , film na YouTube tutaj .

Virtronics Arduino Simulator

Strona Virtronics, do której prowadzi powyższy link, zawiera także kilka innych symulatorów Arduino, zarówno bezpłatnych, jak i płatnych.

Biorąc pod uwagę zainteresowanie, jakie wywołuje Arduino, istnieje prawdopodobnie więcej takich symulatorów, więc nie ma sensu próbować wymieniać je wszystkie w odpowiedzi tutaj.

Warto zauważyć, że istnieje także aplikacja Arduino Simulator na iPhone'a : nie jest to zalecenie, ponieważ nie widziałem jej jeszcze w działaniu.


Na marginesie:

Arduino samo w sobie jest płytką do prototypowania / eksperymentowania. Jest idealny do programowania eksperymentalnego kodu, debugowania go, modyfikowania, a następnie ponownego flashowania świeżego kodu, prawie tyle razy, ile się chce . Jeśli kod się zawiesi, zresetuj go i wprowadź ponownie zmiany ze zmianami.

Dlatego wątpliwe jest, czy użycie symulatora, który nigdy nie będzie w stanie idealnie naśladować różnych rzeczywistych czasów lub innych problemów, z którymi może się spotkać aplikacja.

Jeśli chodzi o koszt Arduino, istnieje kilka opcji:

  • Niedrogie klony Arduino Nano w serwisie eBay - Mam kilka płyt Meduino Nano Enhancement , działają one doskonale, a ich cena nie przekracza 10 USD, w tym wysyłka na cały świat: Meduino Nano Enhancement
  • Stwórz własne Arduino - strona Arduino przeprowadzi Cię przez proces tworzenia płyty na desce , która nawet nie wymaga lutowania!
Anindo Ghosh
źródło
Dziękujemy za udostępnienie linku do symulatora Virtronics!
powtac
Tak, debugowanie i ponowne flashowanie jest znacznie łatwiejsze. Flash ATMega328 jest oceniany na 10000 cykli przepisywania, więc nawet jeśli przepisujesz go 10 razy każdego dnia, masz przed sobą ponad dwa lata zabawy :-) Dość dużo zabawy dla hobbysty. Jeśli jesteś nieco bardziej w to zaangażowany, możesz użyć nowszych płyt do debugowania, a kiedy zaczną się zużywać (powiedzmy po 5000 cyklach?), Możesz użyć ich do stabilnych aplikacji i kupić nową do debugowania.
Lorenzo Donati wspiera Monikę
8

Błędy czasu wykonania można znaleźć, jeśli można ręcznie przejść przez program z podłączonym Arduino i debugować ( po pobraniu kodu do Arduino). Jest to dostępne w Visual Micro, chociaż wymaga Visual Studio. Możesz ustawiać punkty przerwania, oceniać zmienne i zmieniać wartości zmiennych. Możesz także uzyskać wizualizację pamięci w czasie:

wprowadź opis zdjęcia tutaj


źródło
Bardzo schludny. Jak dojrzały jest ten projekt - a raczej czy IDE działa płynnie w twoim doświadczeniu?
boardbite
Nie użyłem go do profilowania i użyłem go tylko krótko, ale integruje się całkiem dobrze i działa dobrze dla mnie. Naprawdę doceniam możliwość debugowania bez uciekania się do Serial.print
4

Jednym ze sposobów na to byłoby utworzenie programu otoki dla rzeczywistego kodu, który symuluje wszystkie dane wejściowe i akceptuje dane wyjściowe (tworząc w ten sposób pętlę sprzężenia zwrotnego) zgodnie z rzeczywistym środowiskiem. Wymagałoby to różnego wysiłku w zależności od rodzaju programu, stopnia testowania i liczby danych wejściowych.

Pamiętaj, że pisząc program otoki, powinieneś postępować zgodnie z podejściem „ czarnej skrzynki” .

wprowadź opis zdjęcia tutaj

W przeciwnym razie Twój zewnętrzny kod może nie przetestować programu tak dobrze, jak to możliwe, ponieważ pamiętając o rzeczywistym kodzie podczas tworzenia kodu testowego, możesz stronić od ignorowania przypadków granicznych lub obszarów problemowych (zaobserwowano to podczas wykonywania Testów White-Box, które jest alternatywą).

asheeshr
źródło
Czy znasz jakieś przykłady? Większość kodu Arduino, który widziałem, nie ma odpowiednich testów jednostkowych nawet dla części, które nie wymagają wejścia / wyjścia.
Jakob
@Jakob Zwykle piszę własny kod do testów. Jest to praktyczne w przypadku małych projektów.
asheeshr