Pytanie:
Pisanie oprogramowania wbudowanego bez sprzętu
anishkumar
2016-02-07 20:54:08 UTC
view on stackexchange narkive permalink

Weź pod uwagę, że zespół zajmujący się sprzętem zajmie 2 miesiące, aby opracować jakiś sprzęt, ale do tego czasu będę musiał mieć gotowe oprogramowanie.

Moje pytanie brzmi, jak napisać oprogramowanie i przetestować je bez sprzętu?

Czy są jakieś standardy, których należy przestrzegać? Jak to robisz?

W zależności od tego, jak skomplikowany jest sprzęt, możesz wypróbować symulator.Jest to całkiem wykonalne, jeśli jest to tylko mikrokontroler z prostymi urządzeniami peryferyjnymi.Co więcej i nie masz szczęścia na tej trasie.
Spróbuj znaleźć płyty rozwojowe dla mikro i wszelkich innych urządzeń peryferyjnych, z których korzystasz, i spróbuj połączyć je wszystkie w sposób, który najbardziej przypomina projekt twojego zespołu sprzętowego.Będzie duży i brzydki, ale powinieneś być w stanie złożyć system, który jest wystarczająco zbliżony do prawdziwego - przynajmniej na tyle, na ile twoje oprogramowanie może powiedzieć ...
W najgorszym przypadku, jeśli nie możesz poprawnie zasymulować sprzętu, spróbuj go wyłączyć.Zaledwie kilka tygodni temu chciałem przetestować komunikację sieciową z innym programem, tylko po to, aby stwierdzić, że program wyszedłby z programu `exit ()`, ponieważ próbował mmap zakodować adresy w / dev / mem.
W wielu przypadkach lepiej jest użyć symulatora do tworzenia oprogramowania wbudowanego - znacznie łatwiejszego do debugowania.Problem w tym, że potrzebujesz porządnego symulatora.Czasami istnieje ogólny, który można dostosować, czasami sprytny stażysta może napisać go w kofeinowym szale kodowania.
Sześć odpowiedzi:
Olin Lathrop
2016-02-07 21:19:08 UTC
view on stackexchange narkive permalink

Brak sprzętu na początkowych etapach tworzenia oprogramowania sprzętowego. Typowe strategie radzenia sobie z tym to:

  1. Poświęć czas na dokładne zaprojektowanie systemu, zanim napiszesz jakikolwiek kod. Oczywiście i tak powinieneś to zrobić, ale w tym przypadku jest to nawet ważniejsze niż zwykle. O wiele łatwiej jest debugować dobrze przemyślane oprogramowanie niż bałagan oparty na makaronie.

  2. Prawidłowo zmodularyzuj wszystko, minimalizując interfejsy między modułami. Pomoże to w usunięciu błędów w poszczególnych modułach i umożliwi łatwiejsze testowanie poszczególnych modułów.

  3. Pisz kod od dołu do góry, sterowniki dotykające sprzętu idą jako pierwsze, logika aplikacji wysokiego poziomu na końcu. Pozwala to na wczesne wykrycie niedogodności narzuconych przez architekturę. Nie bój się zmieniać architektury, gdy wyjdą na jaw realia sprzętowe, ale upewnij się, że cała dokumentacja jest odpowiednio aktualizowana.

  4. Symuluj. Większość firm zajmujących się mikrokontrolerami dostarcza symulatory oprogramowania swoich mikrokontrolerów. Mogą to zajść tylko do tej pory, ale nadal mogą być bardzo przydatne. Symulowanie wejść i mierzenie wyjść sprzętu może być trudne, ale sprawdzenie logiki wyższego poziomu w ten sposób nie powinno być zbyt trudne.

    W tym miejscu ponownie pomaga konstrukcja modułowa. Jeśli nie możesz rozsądnie zasymulować niektórych interakcji sprzętowych niskiego poziomu, używasz innej wersji modułu, która dotyka tego sprzętu, ale przekazuje własne symulowane działania na wyższe poziomy. Wyższe poziomy nie będą wiedzieć, że to się dzieje. W ten sposób nie będziesz sprawdzać modułu niskiego poziomu, ale prawie wszystko inne.

Krótko mówiąc, używaj dobrych praktyk projektowania oprogramowania, które oczywiście powinieneś i tak robić.

Chciałbym dodać: zdobądź płyty deweloperskie (tak, wiele, ponieważ prawdopodobnie zabijesz co najmniej jedną ...) jak najszybciej i zainstaluj sterowniki niskiego poziomu.Przetestuj jak najwięcej swojego kodu.Tak, możesz ustawić kod dotyku sprzętowego.Nie, nie możesz całkowicie zasymulować sprzętu, ale możesz uzyskać poprawną funkcjonalność 90% nawet przed pierwszym flashowaniem.Zrobiłem to wszystko w ostatnim projekcie i mieliśmy 99% funkcjonalności i działało, gdy pojawił się prawdziwy sprzęt. Było wspaniale.
Techydude
2016-02-07 21:06:05 UTC
view on stackexchange narkive permalink

Bez żadnego wglądu w to, co opracowujesz, ani na rodzinę mikrokontrolerów, na których będzie oparty Twój sprzęt, większość rodzin mikrokontrolerów ma dostępne tanie systemy programistyczne z zestawem typowych urządzeń peryferyjnych, które mogą pozwalają zasymulować przynajmniej część ostatecznego sprzętu docelowego.

Zgoda.Powiedziałbym to mocniej.W takiej sytuacji, w której oprogramowanie musi być ukończone w tym samym czasie co sprzęt, użyłbym tylko mikrokontrolera, który miał odpowiednią płytkę rozwojową lub ewaluacyjną.
Nawet jeśli masz wgląd w to, co rozwija OP, większość rodzin mikrokontrolerów * nadal * ma dostępne symulatory.
Używam obu metod.Jednak dodatkowo pilnuję wymaganego sprzętu do testowania linii produkcyjnej.Możesz spotkać się z inżynierami produkcji i zaprojektować sprzęt, aby przetestować sterowniki, które mogą następnie stanowić część testów produkcyjnych.Jeśli masz szczęście, mogą nawet zbudować sprzęt dla płytki programistycznej / prototypu, aby również wyprzedzić proces.Wszystko zależy od tego, jak złożysz prośbę o pomoc ...
To najlepsza odpowiedź na to pytanie, ponieważ zawsze mam płytę deweloperską do programowania podstawowych funkcji przed wypróbowaniem jej na płytce drukowanej.
erebos
2016-02-08 13:51:52 UTC
view on stackexchange narkive permalink

W zależności od tego, jak zależna będzie od sprzętu aplikacja, możesz po prostu rozpocząć wdrażanie projektu na standardowym komputerze (Windows, Linux ...). Większość dostępu do urządzeń peryferyjnych i tak powinna być abstrakcyjna, więc zaimplementowanie niektórych fikcyjnych funkcji, które zostaną później zastąpione, nie jest wielkim problemem. Jeśli nie można zasymulować jakiegoś zachowania, możesz przynajmniej zrobić makietę systemu (API ...), aby rzeczywista implementacja przebiegała znacznie szybciej i wyraźniej, gdy tylko sprzęt będzie gotowy.

Jest oczywiście wiele rzeczy, których nie można zasymulować, na przykład zachowanie w czasie rzeczywistym lub złożone sterowniki sprzętu. Z drugiej strony kontroler ADC sterowany przerwaniami można łatwo zasymulować za pomocą wątku, który odczytuje wartości z pliku lub portu sieciowego.

Oczywiście wszystko to zależy w dużym stopniu od różnych czynników:

  • Czy możesz używać tego samego / podobnego łańcucha narzędzi na kontrolerze i komputerze (np. gcc)?
  • Jak zależny jest sprzęt od systemu?
  • Jakie masz doświadczenie w programowaniu na PC?

Przede wszystkim projektuję prawie każdy moduł oprogramowania układowego na komputerze.

To samo tutaj.Pewne różnice między kompilatorami (wewnętrzne, specjalne słowa kluczowe, zamknięty system operacyjny i stos sieciowy niezupełnie kompatybilne z BSD) i błędy (z C ++) wymuszające intensywne użycie wstępnie dołączonych plików i preprocesora, ale sam kod może być prawie identyczny między DSPi PC.W przypadku wersji na komputery PC mogę użyć silnego i zaawansowanego sprawdzania błędów w czasie wykonywania (CodeGuard), a jego możliwości debugowania nie mogą być dopasowane na platformach wbudowanych.Dodatkowym bonusem jest to, że mogę mieć kilka dodatkowych urządzeń wirtualnych dla dowolnej sieci i testów obciążenia.
Dzięki dostępności Raspberry Pi i BeagleBone, Twoje środowisko programistyczne może równie łatwo być środowiskiem uruchomieniowym - nie ma problemów z łańcuchem narzędzi itp. Ponadto możesz używać valgrind / helgrind, gdb itp.
Ronan Paixão
2016-02-08 04:25:27 UTC
view on stackexchange narkive permalink

Spróbuj zdobyć symulator dla swojego chipa. Powinieneś zasymulować wszystkie oczekiwane dane wejściowe, a także niektóre nieoczekiwane. Modularyzuj / streszczaj w miarę możliwości i pisz testy jednostkowe. Jeśli możesz, testy te mogą stać się częścią twojego rzeczywistego kodu i zamieniają się w funkcję (autotest płytki).

Jeśli nie możesz uzyskać symulatora, abstrakcyjne jak tylko możesz, HAL (warstwa abstrakcji sprzętu). Wszyscy kierowcy za tym stoją. Spróbuj wyodrębnić wszystkie zestawy specyficzne dla platformy za jakimś wywołaniem funkcji C i potraktuj je również jako sterowniki. Resztę napisz jako przenośny kod C / C ++ i stwórz cienką warstwę HAL dla x86 i uruchom ją na swojej maszynie ze wszystkimi przypadkami testowymi.

W ten sposób, gdy otrzymasz sprzęt, będziesz musiał tylko debugować HAL. Im jest cieńszy, tym szybciej go debugujesz i wszystko będzie działać. Pamiętaj, że jeśli używasz asemblacji specyficznej dla platformy do szybszych operacji, chcesz BARDZO DUŻO , aby uzyskać testy z dokładnością bitową.

Dokładność bitowa jest szczególnie ważna, jeśli używasz stałego punktu DSP.
Może, ale nie musi, odnosić się do konkretnego przypadku, ale generalnie dokładność bitów ma swoją cenę.QEMU niedawno (2 lata temu) zdecydowało się zaimplementować dokładną bitowo FPU i zgadnij, co się stało z [wydajnością] (http://eltechs.com/wp-content/uploads/2015/06/geobenchmark_raspberrypi2_exagear1.1.png)?
Dokładność bitowa nie jest * aż tak ważna * w przypadku korzystania z FPU.Jest to jednak ** niezwykle ** ważne, jeśli używasz punktu stałego.Zwłaszcza, że programowy punkt stały wymaga wszędzie dodatkowych kontroli.
Co jest wynikiem złych praktyk kodowania.Ludzie nauczyli się zachowywać środki ostrożności podczas porównywania `a == b` z liczbami zmiennoprzecinkowymi, ale nadal bezmyślnie używają ich z liczbami stałymi.
Chociaż słabe praktyki kodowania są sporym problemem, istnieje wiele innych problemów, szczególnie w przypadkach skrajnych.** Przepełnienia ** przychodzą na myśl szybko, podobnie jak ** utrata precyzji **, ** zaokrąglanie **, ** nasycenie ** i ** szerokość a przesunięcie bitowe **.Z tym wszystkim łatwo jest zignorować utratę precyzji w typowych przypadkach testowych.Problem polega na tym, że aplikacja osiąga mniejszą liczbę przypadków, a błędy przesuwają się z bitów ułamkowych na liczby całkowite, co ma miejsce, jeśli zakres jest nieprawidłowo obliczony.Po prostu sprawdź stronę funkcji Projektanta punktów stałych MATLAB, aby zobaczyć, co jeszcze może pójść nie tak w mgnieniu oka.
bluesceada
2016-02-08 20:05:24 UTC
view on stackexchange narkive permalink

Twoje pytanie jest dość szerokie. Sprzęt (HW) może oznaczać w pełni niestandardowy rozwój ASIC / FPGA, programowane przez asemblera DSP lub „tylko” typowy system wbudowany oparty na gotowych mikroprocesorach / mikrokontrolerach / SoC itp. które możesz chcieć zaprogramować ...). W przypadku dużych ilości sprzedaży, uczynienie go ASIC nie jest rzadkością.

Ale w przypadku dwumiesięcznego projektu spodziewam się, że będzie oparty na jakimś mikrokontrolerze:

W każdym razie powinieneś podkreślić zespół zajmujący się sprzętem, aby dał ci prototyp, dzięki któremu możesz rozpocząć testowanie kodu przed ostatecznym terminem - może to po prostu składać się z ogólnej płyty programistycznej, jak niektórzy już wspominali, ale w moim zdaniem ich zadaniem jest dostarczenie ci odpowiedniego, a potencjalnie także niektórych wymaganych / podobnych urządzeń peryferyjnych do testowania.

Symulatory są również możliwe do pewnego stopnia, ale nadal możesz potrzebować scharakteryzować jakiś rzeczywisty świat czujniki / dane, które możesz uzyskać. Tutaj zespół sprzętowy również musi ci przynajmniej pomóc.

Poza tym projekt oprogramowania można już wykonać, a wszystkie moduły wysokiego poziomu można (i powinny być) zaimplementowane i przetestowane jednostkowo bez rzeczywistego Idealnie byłoby również zdefiniować API wraz z zespołem sprzętowym, a oni zapewnią Ci funkcje najniższego poziomu, więc wszelkie zmiany, które wprowadzą po stronie sprzętowej (np. po prostu przedefiniują, których pinów portu używają) będą nie zawsze być dla Ciebie krytycznym.

We wszystkich przypadkach komunikacja jest kluczowa.

Photon001
2016-02-07 21:29:49 UTC
view on stackexchange narkive permalink

Tak, możesz opracować kod swojej płyty docelowej, zanim płyta zostanie wyprodukowana.

Jak?

Najpierw musisz poznać główny cel tego systemu. Więc z tego możesz odpowiednio wybrać kontroler z ogromnego dostępnego źródła, takiego jak digikey, mouser.

I wybierz symulator taki jak Proteus. To zasymuluje dokładny procesor / kontroler, teraz możesz rozpocząć kodowanie. Ale nie można oczekiwać dokładności sprzętowej.

Dlaczego głosować przeciw?Czy mogę wiedzieć, co jest nie tak z tą odpowiedzią?


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...