Profesjonalny przewodnik po narzędziach i technikach debugowania dla urządzeń Internetu rzeczy (IoT)
Przekazane przez: Północnoamerykańscy redaktorzy DigiKey
2021-03-23
Opracowywanie systemu wbudowanego, w którym oprogramowanie i sprzęt muszą ze sobą współgrać, stał się niezwykle złożony i wymagający, nawet dla najprostszych urządzeń Internetu rzeczy (IoT). I to do tego stopnia, że gdy coś pójdzie nie tak - a tak nieuchronnie się dzieje - czas debugowania zazwyczaj nie trwa kilka godzin, lecz nawet tygodnie lub miesiące. Opóźnienia te zwiększają koszty rozwojowe, uniemożliwiają terminowe wprowadzenie produktu na rynek, opóźniają harmonogramy produkcji, niszczą łańcuchy dostaw i plany biznesowe.
Najlepszym sposobem na skrócenie czasu spędzonego na debugowaniu i utrzymanie projektu na właściwym torze jest użycie kombinacji narzędzi do debugowania sprzętu i dostępnego bezpłatnie oprogramowania, aby uzyskać wgląd w to, jak działa system i gdzie występują problemy. Dlatego posiadanie odpowiednich narzędzi do pracy znacznie pomaga w jej szybkim i prawidłowym wykonaniu zarówno przez profesjonalistów, jak i hobbystów.
W tym artykule omówione zostaną narzędzia rozwojowe i oprogramowanie, które można wykorzystywać do debugowania i analizy działania urządzeń IoT. Przedstawiona zostanie płytka rozwojowa firmy STMicroelectronics jako przykład urządzenia IoT, a narzędzia i oprogramowanie firmy SEGGER Microcontroller Systems posłużą jako pomoc w zrozumieniu i debugowaniu systemu. Omówionych zostanie również kilka porad i wskazówek, jak zminimalizować czas debugowania i dostarczyć projekt IoT zgodnie z planem.
Typowe urządzenie Internetu rzeczy (IoT) do debugowania
Urządzenia IoT stały się powszechne w niemal każdej branży, od inteligentnego domu po sterowanie monitoringiem przemysłowym. Pomimo różnorodności zastosowań, istnieje kilka typowych komponentów, w które urządzenie IoT jest wyposażone. Są to między innymi:
- Mikroprocesor
- Radio zapewniające łączność
- Czujniki
Deweloper nie będzie chciał tworzyć własnej płytki, aby poznać techniki debugowania lub testować fragmenty kodu aplikacji. To jest po prostu zbyt czasochłonne. Zamiast tego mądrzej jest pracować na taniej płytce rozwojowej, takiej jak zestaw badawczy węzła IoT B-L4S5I-IOT01A firmy STMicroelectronics. Zawiera ona prawie wszystko, co można znaleźć w typowym urządzeniu Internetu rzeczy (ilustracja 1).
Ilustracja 1: zestaw badawczy węzła IoT B-L4S5I-IOT01A firmy STMicroelectronics zawiera wszystkie komponenty zazwyczaj wymagane w urządzeniu Internetu rzeczy (IoT). (Źródło obrazu: STMicroelectronics)
Płytka zawiera mikrokontroler STM32L4S5VIT6 oparty na procesorze Arm® Cortex®-M4, taktowany zegarem o częstotliwości 120MHz. Jego uzupełnienie stanowią 2MB pamięci flash i 640kB pamięci RAM. Co ważne dla celów tego ćwiczenia, płytka zawiera Wi-Fi i mnóstwo czujników, które można wykorzystywać do szybkiego zbudowania urządzenia testowego Internetu rzeczy (IoT).
Profesjonalne narzędzia sprzętowe do debugowania
Prawie każda płytka rozwojowa posiada wewnętrzny interfejs JTAG/SWD, więc deweloperzy nie muszą kupować własnego programatora. Mogą po prostu pracować z płytką rozwojową zaraz po rozpakowaniu. Chociaż jest to świetne ze względów marketingowych, nie sprawdza się tak świetnie w czasie faktycznych prac projektowych: wewnętrzne debuggery często są drastycznie zredukowanymi wersjami, które mają ograniczenia, takie jak liczba dostępnych punktów przerwania i szybkość przesyłu danych przez interfejs. Dla niewtajemniczonych te ograniczenia mogą nie wydawać się wielkim problemem, ale posiadanie nieograniczonych punktów przerwania pozwala uniknąć konieczności ciągłego ich włączania i wyłączania, a wysokie prędkości transmisji są potrzebne do śledzenia aplikacji (więcej na temat śledzenia w sekcji poświęconej narzędziom programistycznym).
Istnieje kilka różnych narzędzi, które mogą zapewnić profesjonalne środowisko debugowania, ale same narzędzia to tylko połowa rozwiązania. Narzędzia te muszą być wspierane przez dobre oprogramowanie. Jednym z zestawów narzędzi, który wyróżnia się zarówno z perspektywy sprzętu, jak i oprogramowania, jest seria SEGGER J-Link. Seria ta zawiera wersje debuggera dla prawie każdego typu dewelopera, od studentów i hobbystów po profesjonalistów.
Istnieją dwa modele, które - jak wynika z doświadczenia - są najbardziej przydatne dla zwykłych deweloperów: J-Link Base i J-Link Ultra+ (ilustracja 2). Pod względem wielkości obudowy oba urządzenia są identyczne, ale J-Link Ultra+ zapewnia deweloperom wyższą szybkość przesyłania danych do pamięci RAM (3MB/s w porównaniu do 1,0MB/s) oraz większą szybkość interfejsu SWD (100MHz zamiast 30MHz). Wyższe prędkości mają znaczenie, gdy deweloper chce śledzić swoją aplikację, aby uzyskać wgląd w jej działanie, zachowanie systemu operacyjnego czasu rzeczywistego (RTOS) i debugować swój system.
Ilustracja 2: zestaw SEGGER J-Link Ultra+ oferuje deweloperom ulepszone środowisko debuggera dzięki interfejsowi docelowemu 50MHz. (Źródło ilustracji: SEGGER Microcontroller Systems)
Korzystne w J-Link i płytce rozwojowej B-L4S5I-IOT01A jest to, że oba urządzenia mogą być połączone kablem Tag-Connect TC2050-IC-NL i zaciskiem ustalającym TC2050-CLIP-3PACK. Umożliwiają one podłączenie debuggera do płytki rozwojowej przez złącze typu „łoże fakira” (ilustracja 3). Może być konieczne dopasowanie 20-wtykowego złącza J-Link do 10-wtykowego złącza w kablu TC-2050. Jedną z opcji możliwych do użycia w tym celu jest 10-wtykowy adapter igłowy 8.06.04 J-Link.
Ilustracja 3: płytka rozwojowa B-L4S5I-IOT01A pozwala na podłączenie zespołu kablowego Tag-Connect przez miejsce na płytce drukowanej przypominające „łoże fakira” (po prawej). (Źródło obrazu: STMicroelectronics)
Gdy deweloper utworzy to połączenie sprzętowe, może użyć narzędzi programistycznych do analizy i debugowania swojej aplikacji.
Profesjonalne narzędzia programistyczne do debugowania
Istnieje sporo narzędzi programistycznych, które doskonale współpracują z zestawami SEGGER J-Link, a które o dziwo nie są dostarczane przez firmę SEGGER. Poniżej przyjrzymy się kilku z tych bezpłatnych narzędzi i zobaczymy, jak deweloperzy mogą wykorzystać je do debugowania swojego oprogramowania.
Pierwszym z nich jest J-Scope. J-Scope to narzędzie podobne do oscyloskopu, które wyświetla wartości zmienne w czasie. Deweloperzy mogą monitorować jedną lub kilkadziesiąt zmiennych. Należy jednak pamiętać, że w miarę monitorowania coraz większej liczby zmiennych, można pobierać mniejszą liczbę próbek, zanim bufor próbek przepełni się i dane zostaną utracone.
Zmienne są wybierane przez wprowadzenie do narzędzia J-Scope pliku elf, który jest tworzony przez kompilator. Zawiera on lokalizacje pamięci do odczytania, a deweloper może ustawić częstotliwość próbkowania i monitorować, jak zmienna lub zmienne zmieniają się w czasie. Prosty przykład śledzenia trzech zmiennych przedstawiono na ilustracji 4.
Ilustracja 4: programu J-Scope można używać do monitorowania zmiennych za pośrednictwem adaptera J-Link podczas pracy aplikacji w czasie rzeczywistym. (Źródło ilustracji: SEGGER Microcontroller Systems)
Kolejnym narzędziem jest Ozone. Ozone jest interfejsem debuggera i analizatorem wydajności. Deweloperzy mogą załadować do niego plik elf i prowadzić debugowanie na poziomie źródłowym. Mogą ustawiać punkty przerwania i aktualizować kod. Szczególnie przydatną funkcją dla deweloperów jest możliwość śledzenia instrukcji (jeśli ich sprzęt to umożliwia) oraz ustalania, które instrukcje kodu asemblera i języka C zostały wykonane. Jest to szczególnie przydatne do weryfikacji pokrycia kodu w testach typu sprzętowego sprzężenia zwrotnego (HiL).
Program Ozone może również pomagać deweloperom w analizie działania ich systemu (ilustracja 5) i wizualizacji zmiennych w czasie. Zapewnia on możliwości podobne do J-Scope, ale w bardziej zintegrowany sposób. Można go używać nawet do monitorowania zużycia energii i synchronizowania wszystkich tych zdarzeń w jednym miejscu.
Ilustracja 5: programu Ozone można używać do śledzenia zmiennych za pośrednictwem adaptera J-Link podczas pracy aplikacji w czasie rzeczywistym, także analizy pokrycia kodu i debugowania z uwzględnieniem systemu RTOS. (Źródło ilustracji: SEGGER Microcontroller Systems)
Trzecim narzędziem jest SystemView. SystemView pozwala deweloperom analizować zachowanie systemu operacyjnego czasu rzeczywistego (RTOS) w czasie jego pracy. Przełączanie zadań jest rejestrowane w buforze śledzenia, a następnie raportowane do programu SystemView przez debugger (ilustracja 5). Program SystemView wyświetla te informacje w sposób, który pozwala deweloperowi zobaczyć przełączniki kontekstowe i zmierzyć parametry działania systemu. Jest to również świetny sposób na wizualizację systemu i znalezienie błędów i innych problemów.
Ilustracja 6: program SystemView zapewnia łącze do systemu RTOS, które pozwala deweloperom mierzyć działanie zadań i wizualizować, co robi system RTOS i kiedy to robi. (Źródło ilustracji: SEGGER Microcontroller Systems)
Porady i wskazówki dotyczące debugowania systemu wbudowanego
Debugowanie urządzenia IoT wymaga od deweloperów posiadania zarówno odpowiednich narzędzi sprzętowych, jak i programowych. Oba te elementy muszą być wdrożone, jeśli deweloperzy chcą skrócić czas, który spędzają na debugowaniu. Oto kilka porad i wskazówek, o których powinni pamiętać deweloperzy, aby z powodzeniem przeprowadzić debugowanie:
- Zastosowanie profesjonalnego debuggera pozwala zmaksymalizować szybkość transmisji danych przez interfejs. Ilość użytecznych danych, które można uzyskać z systemu, zależy od tego, jak szybko dane te mogą być odbierane. Niższe prędkości powodują wydłużenie sesji debugowania.
- Oprogramowanie debugujące należy skonfigurować na wczesnym etapie cyklu rozwojowego. Deweloperzy nie powinni czekać z konfiguracją narzędzi do debugowania, aż pojawi się problem.
- Od początku prac rozwojowych należy korzystać z narzędzi śledzenia. Pozwalają one deweloperom monitorować działanie systemu i natychmiast zrozumieć, jak wpływają na nie zmiany w oprogramowaniu.
- Należy korzystać ze śledzenia instrukcji lub próbkowania licznika programu do zrozumienia pokrycia kodu systemu podczas testowania. Błędy występują w niesprawdzonych gałęziach warunkowych i kodzie.
- Należy korzystać z protokołów szybkiego transferu danych poza układ, takie jak biblioteki Real-time Transfer (RTT).
Deweloperzy, którzy zastosują się do powyższych wskazówek i porad, przekonają się, że mogą zaoszczędzić sporo czasu i frustracji podczas prób opracowania urządzenia IoT.
Podsumowanie
Oprogramowanie urządzeń IoT stało się złożone, ale nie oznacza to, że profesjonalni lub hobbystyczni developerzy muszą tkwić w ciągłym debugowaniu swoich systemów. Korzystanie z profesjonalnych narzędzi rozwojowych i oprogramowania może zapewnić deweloperom wgląd, którego potrzebują nie tylko do usuwania błędów w systemie, ale do analizy i poprawy jego działania. Inwestując w te narzędzia, użytkownicy mogą radykalnie skrócić czas przeznaczany na debugowanie i sprawić, by ich projekty działały i trafiały na rynek w rozsądnych ramach czasowych.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




