- 1. Rozwój wymagań produktowych
- 2. Projektowanie systemów i tworzenie algorytmów
- 3. Kodowanie wbudowanego oprogramowania układowego
- Testowanie wbudowanego oprogramowania układowego
Tworzenie oprogramowania jest ogólnie trudne, ale w przypadku systemu wbudowanego jest na zupełnie nowym poziomie trudności. Twórcy oprogramowania układowego muszą mieć dobrą wiedzę na temat rozwoju sprzętu i rozumieć wewnętrzne działanie wbudowanego procesora. W dzisiejszym artykule podzielę się narzędziami i wskazówkami, które można wykorzystać do osiągnięcia wysokiego poziomu wydajności i wyeliminowania niektórych rzeczy, które sprawiają, że tworzenie oprogramowania układowego jest żmudne.
Tworzenie oprogramowania wbudowanego przebiega przez podobny proces jak tworzenie „zwykłego” oprogramowania. Niezależnie od przyjętego modelu rozwoju / zarządzania, Embedded Software Development zazwyczaj obejmuje następujące kroki:
- Rozwój wymagań produktowych
- Projektowanie systemów i opracowywanie algorytmów
- Kodowanie
- Testowanie
Przeanalizujemy niektóre trudności, które pojawiają się na tych etapach, oraz niektóre narzędzia, które mogą zwiększyć wydajność i produktywność.
1. Rozwój wymagań produktowych
Specyfikacje produktów są często przygotowywane z myślą o projektantach płyt. Zwykle zawiera niewiele informacji, które mogłyby pomóc w opracowaniu oprogramowania układowego, dlatego twórca oprogramowania wbudowanego otrzymuje wadliwy dokument o długości 250 stron (średnio), którego nie można wykorzystać jako odniesienia, a jeśli nie zostanie dokładnie rozważony, może łatwo doprowadzić do niedopatrzeń w projekcie, co z kolei spowoduje prowadzą do wydłużenia ram czasowych projektu, jeśli nie do całkowitego niepowodzenia projektu. Dokumenty rzadko zawierają informacje o rejestrach lub ich polach bitowychmiędzy innymi, a to kosztuje programistów oprogramowania układowego kilka godzin roboczych podczas przeszukiwania dokumentu w celu określenia rzeczy, takich jak, który rejestr należy do której grupy i które pole bitowe należy do którego rejestru. Poniżej znajduje się kilka wskazówek, które można wziąć pod uwagę, aby opracować bardziej przydatne dokumenty specyfikacji projektu.
Korzystanie z opisów rejestrów
Jak wspomniano powyżej, programiści oprogramowania układowego muszą zrozumieć zawiłości wszystkich rejestrów, pamięci itp. Wszystkich elementów sterujących (CPU, MCU itp.) W projekcie, aby móc skutecznie kontrolować wszystkie części systemu. Aby to wprowadzić, programiści oprogramowania układowego mogą zapewnić, że dokument specyfikacji zawiera właściwy opis rejestrów wraz z mapami pamięci. Wszystkim rejestrom w elemencie kontrolnym można przypisać charakterystyczną nazwę, która ułatwia ich identyfikację w całym dokumencie i wszystkie mogą być połączone na gorąco, tak że prowadzą do listy w dokumencie, która zawiera nazwę, lokalizację, blok i adres każdy rejestr.
Opisy zadań
Innym sposobem, dzięki któremu dokumenty specyfikacji mogą być przydatne dla twórców oprogramowania wbudowanego, jest opisanie, co ma robić każdy blok i jak powinien to robić. Również na tym etapie należy zaplanować obsługę błędów w każdym bloku. Zasadniczo wygląda to tak, jak mówi programista oprogramowania układowego; „Kiedy tu dotrę, mam zrobić to, to i to, upewniając się, że to, to i tamto się nie wydarzy”. Pomaga to kierować pracą programisty i pomaga ocenić projekt jeszcze przed rozpoczęciem projektowania, aby zidentyfikować potencjalne błędy i błędy, oszczędzając cenny czas i pieniądze.
Istnieją inne czynniki, w tym struktura dokumentu, użycie łatwych do odczytania czcionek (coś, z czym programiści mogą pracować nawet wtedy, gdy są zmęczeni), wykresy i zdjęcia, jeśli to możliwe, co może zwiększyć wydajność zespołu oprogramowania układowego po tym etapie.
2. Projektowanie systemów i tworzenie algorytmów
Ten etap obejmuje opracowanie pseudokodów, schematów blokowych, maszyn stanu i wszystkiego, co jest związane z projektowaniem oprogramowania układowego. Na tym etapie można użyć wielu narzędzi, które pomogą uporządkować myśli, zgłębić starsze / wcześniej napisane oprogramowanie wokół projektu i opracować własny schemat blokowy, maszynę stanu itp. Niektóre z tych narzędzi omówiono poniżej.
PIMs
Na tym etapie rozwoju produktu programiści mają tendencję do pisania wielu bazgrołów, ponieważ zbierają zasoby dotyczące projektu, od linków internetowych po formuły itp. Jednym z najlepszych sposobów śledzenia tych informacji, aby były przydatne później, jest użycie PIM (zarządzanie informacjami o produkcie) narzędzia. Istnieje wiele PIMów, ale wspomnę o kilku z kilkoma wyjątkowymi funkcjami.
1. Evernote
Evernote pomaga robić notatki, które są dostępne na dowolnej platformie, dzięki czemu możesz sprawdzić notatkę sporządzoną na komputerze w domu autobusowym. Notatki są dobrze zorganizowane i można je w pełni przeszukiwać, więc zawsze znajdziesz to, czego potrzebujesz.
2. TrunkNote
Trunk note to aplikacja do robienia notatek podobna do Wiki. Przenosi całą moc organizacyjną wiki do robienia notatek. Jest to aplikacja oparta na telefonie komórkowym, ale można ją łatwo zsynchronizować z komputerem za pośrednictwem sieci WIFI.
Inne rodzaje PIMów, takie jak Tiddlywiki itp. Każdy z nich ma cechy, które mogą uczynić go bardziej atrakcyjnym dla określonych osób i może wymagać trochę samplowania, zanim w końcu się zdecydujesz.
Zrozumienie starego kodu
Kolejną grupą narzędzi, które są bardzo przydatne na etapie projektowania, są narzędzia do zrozumienia starszych kodów. W sytuacjach, gdy projektowany produkt jest ulepszoną wersją poprzedniego produktu, deweloper może uznać za przydatne przejrzenie pracy, która została już wykonana, aby uzyskać kilka pomysłów i być może fragmenty kodu dla nowego projektu. To może być dość długa droga, zwłaszcza jeśli nie byłeś częścią zespołu, który zbudował poprzednie oprogramowanie. Istnieje wiele programów, które pomagają budować drzewa, tworzyć dokumentację i schematy blokowe z już napisanego kodu.
1. Doxygen
Doxygen to dość potężne narzędzie, które pomaga tworzyć dokumentację z kodów źródłowych. Został zaprojektowany głównie do pracy z C ++, ale działa również z C, Pythonem i kilkoma innymi językami. Ma możliwość wyodrębnienia struktury kodu dowolnego kodu, zapewniając automatycznie generowane wykresy zależności i diagramy dziedziczenia, aby pomóc w wizualizacji kodu.
2. Graphviz
Według ich strony internetowej, graphviz pomaga przedstawiać informacje strukturalne w postaci diagramów abstrakcyjnych grafów i sieci. Może być używany razem z Doxygen, aby lepiej zrozumieć tworzoną przez niego grafikę.
3. Srecord
Srecord to potężne narzędzie do manipulowania obrazami oprogramowania układowego i konwersji między różnymi formatami plików. Może być używany do obliczania i wykonywania CRC i sum kontrolnych bloków bajtów, poprawiania plików błędów utworzonych z powodu błędnych łańcuchów narzędzi oraz filtrowania lub przenoszenia sekcji plików. Więcej informacji na temat jego wykorzystania można znaleźć na jego stronie SourceForge.
Inne narzędzia należące do tej kategorii to między innymi CrystalRev i Hexplorer .
Opracowywanie algorytmów
Wszystkie agregaty badawcze i notatek do opracowania algorytmów przekształcających się w pseudokody i schematy blokowe projektu. Istnieje kilka narzędzi do tworzenia schematów blokowych i chociaż większość z nich nie jest przeznaczona wyłącznie do tworzenia oprogramowania sprzętowego, zapewniają one użyteczne i ważne funkcje, które po prostu wykonują zadanie, a także pomagają w utrzymaniu wykresów w całym cyklu rozwoju produktu. Poniżej znajdują się jedne z najlepszych narzędzi do tworzenia schematów blokowych.
1. QFSM
QFSM to graficzne narzędzie do projektowania i symulacji maszyn skończonych. Jego zdolność do symulacji projektów sprawia, że jest o wiele lepszy niż większość innych programów z tej grupy. Jest to szczególnie przydatne podczas projektowania maszyn stanowych dla FPGA i podobnego sprzętu docelowego.
2. Lucid Chart
Lucid chart jest prawdopodobnie najlepszym i najbardziej elastycznym oprogramowaniem do tworzenia schematów blokowych. Jest oparty na sieci i ma funkcje zespołowe, które umożliwiają pracę między wieloma urządzeniami i współpracę w czasie rzeczywistym z członkami zespołu.
3. Microsoft Visio
Visio jest obecnie jednym z najlepszych narzędzi graficznych. Zawiera tablicę obiektów z różnych dziedzin, co ułatwia opisanie wszystkiego. Jednak nie zawiera funkcji usprawniających współpracę między zespołami i może być używany tylko na komputerze z systemem Windows, na którym jest zainstalowany.
4. Prezentacje Google
Jedną z kluczowych rzeczy w rozwoju produktów w dzisiejszym świecie jest stosowanie narzędzi, które pozwalają zespołom efektywnie współpracować z dowolnego miejsca i to jest jedna z rzeczy, które zapewniają prezentacje Google. Może być używany do tworzenia wszelkiego rodzaju schematów, od schematów przepływu oprogramowania po schematy organizacyjne i mapy myśli. Jest oparty na chmurze i działa w prawie wszystkich popularnych przeglądarkach.
Istnieje kilka innych narzędzi do tworzenia schematów blokowych i ogólnego opracowywania algorytmów, jak zwykle, z których każdy ma swoje zalety i wady.
3. Kodowanie wbudowanego oprogramowania układowego
Wszystko, o czym do tej pory było wspomniane, prowadzi tutaj. Świat SDK i IDE, wybór narzędzi na tym etapie zależy od urządzenia docelowego i funkcji, które mają być wbudowane w urządzenie, z tego powodu wykluczę z dyskusji popularne SDK i IDE, takie jak MPLAB itp. do narzędzi, które mają bardziej komplementarny charakter.
1. QT (tworzenie GUI)
Wyświetlacze (interaktywne lub nie) są obecnie najpopularniejszymi mediami służącymi do przekazywania opinii użytkownikom, a SDK QT jest jednym z najlepszych i prawdopodobnie nie jest obcy nikomu w osadzonym kręgu. Zapewnia funkcje „przeciągnij i upuść”, które ułatwiają tworzenie złożonych aplikacji opartych na graficznym interfejsie użytkownika dla urządzeń wbudowanych, niezależnie od platformy docelowej lub języka programowania używanego do ogólnego rozwoju projektu. W zasadzie eliminuje stres związany z używaniem kodu do tworzenia interfejsów użytkownika.
2. (Szybkie prototypowanie)
Jednym z największych wąskich gardeł w rozwoju oprogramowania wbudowanego jest fakt, że sprzęt zwykle nie jest dostępny do testowania rzeczy w ruchu podczas opracowywania oprogramowania. Często, gdy jest dostępny, twórcy oprogramowania układowego musieliby czekać cały czas, zanim sprzęt był gotowy, robiąc niewiele lub nic. Zwiększa to czas realizacji i nie tworzy miejsca na synchronizację między inżynierami sprzętowymi i twórcami oprogramowania układowego, która podniosłaby jakość produktu. Aby pomóc w rozwiązaniu tego problemu, pracownicy VaST stworzyli wirtualną platformę prototypowania na poziomie systemów elektronicznych, którą można wykorzystać do stworzenia wirtualnego prototypu sprzętu na którym można uruchomić oprogramowanie wbudowane w celu określenia wydajności systemu, zanim sprzęt będzie gotowy.
3. Doxygen (dokumentacja)
Jedną z najważniejszych części pisania dowolnego kodu jest dokumentacja, a jednym z najpopularniejszych narzędzi do tego jest Doxygen. Oprócz wykorzystania do zrozumienia starszego oprogramowania, Doxygen ma możliwość automatycznego wyodrębniania komentarzy z kodu i tworzenia zawierającej go dokumentacji. Struktury Doxygen zawierają pliki graficznie i tworzą odniesienia dla każdej funkcji, zmiennej i makra używanego w kodzie. Schematy blokowe i diagramy przepływu danych można również osadzać w dokumentacji, łącząc Doxygen z Graphviz.
4. GIT (systemy kontroli wersji)
Trudno uwierzyć, że w dzisiejszych czasach ktokolwiek tworzy oprogramowanie dowolnego typu bez systemu kontroli wersji, ale na wszelki wypadek to bardzo zły pomysł, który może prowadzić do błędów, które będą kosztować Cię czas i pieniądze. Git wyróżnia się spośród wszystkich narzędzi do kontroli wersji z kilku powodów. Jest open source, szybki, wydajny i głównie lokalny. Oprócz Gita warto wspomnieć o narzędziach takich jak Subversion.
Testowanie wbudowanego oprogramowania układowego
Testowanie jest ważną częścią procesu tworzenia wszystkiego. Firmy tracą tysiące dolarów, gdy urządzenia są wycofywane z powodu błędów oprogramowania układowego, więc jest to jedna z części rozwoju, którą należy traktować bardzo poważnie. Często odbywa się to ramię w ramię z kodowaniem i pierwszym zestawem narzędzi do testowania kodu są prawdopodobnie debuggery w ramach IDE lub SDK używanego w projekcie. Testowanie przybiera różne formy i jest przeprowadzane na różnych etapach, jako takie wymaga różnego rodzaju narzędzi. Narzędzia testowe tworzą oprogramowanie sprzętowe i obejmują walidację projektu, analizę statyczną i narzędzia do testowania w czasie wykonywania. Poniżej znajduje się kilka narzędzi, które uważam za naprawdę przydatne.
1. Crystal REV
Crystal revs to narzędzie do nauki kodu. Może być używany do generowania schematu blokowego z kodu C / C ++, co czyni go doskonałym narzędziem do przeglądania własnego kodu i sprawdzania, czy projekt wstępny jest tym, co zostało zaimplementowane. Dzięki crystal rev będziesz mógł szybko dostrzec różnicę między projektem a wdrożeniem. Jego zdolność do generowania schematów blokowych, przepływu danych i wywołań z kodów sprawia, że jest to również narzędzie przydatne do analizowania starszego kodu.
2. PC- Lint
PC-lint to jedno z najstarszych narzędzi do testowania oprogramowania sprzętowego. Jest w stanie analizować oprogramowanie w celu identyfikacji błędów, luk w zabezpieczeniach i zapewnienia, że kod został napisany zgodnie ze standardami branżowymi. Do podobnych narzędzi należą między innymi polyspace, LRDA, Eggplant i Tessy.
3. Wireshark
Jest to przydatne podczas budowania urządzeń sieciowych. Zasadniczo jest to sniffer pakietów i może pomóc w wyświetleniu danych transmitowanych przez urządzenie. Może to pomóc w zabezpieczeniu urządzenia.
4. Sterownik wirtualnego portu szeregowego
Oprogramowanie VSPD firmy eltima to narzędzie, które niedawno przedstawił mi znajomy. Jest to bardzo przydatne podczas pracy ze sterownikami urządzeń i innymi rozwiązaniami związanymi z portami COM. Wirtualny port szeregowy COM umożliwia testowanie zachowania portów COM bez urządzenia docelowego. Możesz stworzyć nieograniczoną liczbę portów, które są w stanie emulować wszystkie ustawienia prawdziwych portów COM. Oprogramowanie jest również wyposażone w takie funkcje, jak dzielenie portu szeregowego, łączenie portów Com, używanie połączeń portu com w pakiecie wśród innych fajnych funkcji.
To wszystko w przypadku tego artykułu, dzięki za poświęcenie czasu na przeczytanie. Chociaż prawdopodobnie nie można wymienić wszystkich dostępnych narzędzi, mam nadzieję, że niektóre z nich okażą się przydatne.