Punkty przerwania to świetny sposób, aby zobaczyć, jak kompilator działa w kodzie. Teraz moje pytanie brzmi: czy istnieje możliwość użycia punktów przerwania podczas debugowania kodu?
Punkty przerwania to świetny sposób, aby zobaczyć, jak kompilator działa w kodzie. Teraz moje pytanie brzmi: czy istnieje możliwość użycia punktów przerwania podczas debugowania kodu?
Odpowiedzi:
Jak zauważono w odpowiedzi Majenko, Arduino IDE nie zapewnia mechanizmu punktu przerwania, ale Atmel Studio obsługuje punkty przerwania . [*]
Jeśli jednak masz przełącznik i diodę LED, możesz śledzić postęp swojego programu w sposób zapewniający niektóre korzyści z punktów przerwania. Dodałbyś podprogram, powiedzmy BPReport()
, że poprzez wyjście szeregowe lub wyświetlacz LCD zgłasza wartości zmiennych krytycznych, a następnie zapala diodę LED i czeka, aż przełącznik zostanie naciśnięty i zwolniony, z zaprzeczeniem. Zadzwoń do BPReport()
rutyny, gdziekolwiek chcesz bezwarunkowy punkt przerwania. W przypadku warunkowych punktów przerwania możesz mieć procedurę, BPReportIf(cond)
która wywołuje, BPReport()
jeśli cond
jest to prawda. Jeśli nie chcesz wysyłać danych przez port szeregowy, możesz użyć kilku diod LED lub LCD, a możesz użyć kilku przełączników, jeśli chcesz mieć zewnętrzne sterowanie przerwaniem (na przykład cond
może to być test jednego z dodatkowych przełączników).
[*] Niektóre debuggery sprzętowe modyfikują pobrany kod za każdym razem, gdy punkty przerwania są dodawane, zmieniane lub usuwane. Takie użycie zużyje pamięć flash szybciej niż tylko od czasu do czasu jej pobieranie. Jeśli chip był intensywnie wykorzystywany do takiego debugowania, nie używaj go w systemie produkcyjnym.
Chociaż Majenko jego odpowiedź jest poprawna, istnieją inne opcje.
Co do prawdziwego debugowania sprzętowego, jak stwierdził majenko, powiedziałbym:
Inną opcją debugowania z zupełnie innej kategorii jest takie uporządkowanie kodu, aby logika decyzyjna (niezależna od sprzętu) i akcja (zależna od sprzętu) były całkowicie oddzielone.
Następnie skompiluj szkic jako program lokalny i debuguj „logikę decyzyjną” na komputerze lokalnym. Ta metoda nie pozwala na „sprzętowe debugowanie”. Ta metoda umożliwia także testowanie jednostkowe.
Zauważ, że twoja lokalna maszyna jest prawdopodobnie 32 lub 64 gorzka, a większość Arduino ma 8 bitów, co spowoduje różnice w typach danych, co jest dodatkowym punktem uwagi podczas korzystania z tej metody.
Biblioteka Arduino-Debug zapewnia prosty debugger na miejscu dla szkiców Arduino. Polecenie debugowania jest dodawane bezpośrednio do szkicu. Powłoka polecenia debuggera jest uruchamiana w punktach przerwania i asercjach.
Zrzut ekranu powyżej pokazuje przykładowy szkic uruchomiony na Arduino Mega z monitorem wyjścia szeregowego używanym przez aplikację i Serial1 używanym dla powłoki debuggera.
Szkicuj polecenia debugowania
Debuguj polecenia powłoki
Wszystkie polecenia powłoki debugowania można skracać do poleceń jednoznakowych. Więcej informacji znajduje się w pliku README; szczegóły instalacji, przykładowy szkic i testy porównawcze.