Czy programowanie wbudowane jest bliższe inżynierii elektrycznej lub tworzeniu oprogramowania? [Zamknięte]

34

Podchodzi do mnie zadanie pisania osadzonego C na mikrokontrolerach. Na początku myślałem, że osadzanie programowania jest dla mnie zbyt małe na stosie oprogramowania, ale może myślę o tym źle.

Normalnie nie wziąłbym udziału w pisaniu kodu, ponieważ nie uważam się za inżyniera elektryka. Czy to złe założenie? Czy jestem w stanie napisać ciekawe i przydatne oprogramowanie dla systemów wbudowanych, czy też skopię się, że spadłem zbyt nisko na stos oprogramowania?

Poszedłem do szkoły informatycznej i bardzo podobało mi się pisanie kompilatora, myślenie o współbieżnych algorytmach, projektowanie struktur danych i tworzenie frameworków. Jednak obecnie jestem zatrudniony jako programista stron internetowych, który nie wykrzykuje interesujących rzeczy, które właśnie opisałem. (Obecnie zajmuję się takimi zagadnieniami, jak: „to pole wyboru musi znajdować się 4 piksele po lewej stronie” i „ta data jest źle sformatowana”).

Doceniam wkład każdego. Wiem, że muszę sam podjąć decyzję, chciałbym tylko wyjaśnić, co to znaczy być wbudowanym programistą, a jeśli pasuje do tego, co uważam za interesujące.

Jeremy Heiler
źródło

Odpowiedzi:

33

Jeśli chcesz być dobry w pracy z systemami wbudowanymi, to tak, czasami musisz myśleć jak EE. Zasadniczo dzieje się to, gdy piszesz kod do połączenia z różnymi urządzeniami peryferyjnymi (magistrale szeregowe, takie jak UART, SPI, I2C lub USB), 8- i 16-bitowe timery, generatory zegara oraz przetworniki ADC i DAC. „Arkusze danych” mikrokontrolerów często pojawiają się na setkach stron, ponieważ opisują każdy fragment każdego rejestru. Pomaga w odczytaniu schematu, dzięki czemu można sondować tablicę za pomocą oscyloskopu lub analizatora logicznego.

W innych przypadkach jest to po prostu pisanie oprogramowania. Ale pod ścisłymi ograniczeniami: często nie będziesz mieć formalnego systemu operacyjnego lub innej struktury i możesz mieć tylko kilka KB pamięci RAM, a może 64 KB pamięci programu. (Limity te zakładają, że programujesz na mniejszych 8 lub 16-bitowych mikrach; jeśli pracujesz z osadzonym Linuksem na 32-bitowym procesorze, nie będziesz mieć takich samych ograniczeń pamięci, ale nadal będziesz musiał poradzić sobie z dowolnymi niestandardowymi sprzęt peryferyjny, dla którego dystrybucja Linuksa nie zapewnia sterowników).

Mam doświadczenie zarówno w EE, jak i CS, więc lubię obie strony medalu. Zajmuję się również programowaniem internetowym (głównie PHP) i aplikacjami komputerowymi (C # i Delphi), ale zawsze najbardziej podobała mi się praca nad projektami osadzonymi.

tcrosley
źródło
Dzięki za odpowiedź. Ograniczenia tak naprawdę nie przeszkadzają mi. Po prostu myślę o sobie jako o oprogramowaniu, a nie inżynierze elektryku. Czy powiedziałbyś, że „programowanie niskiego poziomu” jest tym samym, co „elektrotechnika wysokiego poziomu”?
Jeremy Heiler
+1 za obserwacje 32-bitowe i Linux-a - pracowałem w telekomunikacji, a sprzęt przełącznika przypominał kodowanie zredukowanej wersji Amigi (procesor Motorla 68k). Miałem bardzo szczęśliwe czasy - czasami tęsknię.
Gary Rowe
3
@Jeremy, tak, kiedy próbujesz wymyślić ustawienia skomplikowanego urządzenia peryferyjnego lub patrzysz na szeregowy strumień bitów w zakresie, czasami wydaje się, że programujesz na niskim poziomie, a czasem musisz myśleć jak wysoki -poziom EE. Możesz poświęcić dużo czasu na przeglądanie zawartości rejestru w oknach debugera IDE. Na tym poziomie patrzysz bezpośrednio na sprzęt.
tcrosley
20

Odpowiedź @ tcrosley jest doskonała. Nie musisz być inżynierem elektrykiem, ale znajomość podstaw pomaga.

Nie sądzę, że musisz się obawiać, że będziesz „zbyt niski na stosie oprogramowania”. Jako inżynier wbudowany musiałem rozwiązać wiele bardzo interesujących problemów. Wymieniasz listę zadań, które lubiłeś:

  • Algorytmy współbieżne - radzenie sobie z asynchronicznymi przerwaniami na poziomie sprzętu wiąże się z tak wieloma interesującymi wyzwaniami, jak używanie modelu wątku systemu operacyjnego.

  • Projektowanie struktur danych - Sprawdź. Konstrukcja zapewniająca kompaktowość i sprawny dostęp.

  • Opracowywanie ram - sprawdź. W systemach z gołą kością możesz zaprojektować mini-OS.

  • Pisanie kompilatora - może nie, ale możesz skończyć optymalizacją kodu niskiego poziomu, podobnie jak etap generowania zestawu kompilatora.

Każdego dnia wolałbym pracować na systemach wbudowanych niż kodować interfejsy użytkownika. Nigdy nie zapomnisz, kiedy po raz pierwszy zobaczysz, jak maszyna porusza się tak, jak ją zaprogramowałeś. Jest to o wiele bardziej satysfakcjonujące niż wypychanie pikseli.

AShelly
źródło
Dzięki za mapowania 1 do 1 AShelly. Nic nie wiedząc o wbudowanym środowisku pracy, dobrze o tym wiedzieć.
Jeremy Heiler
6

Jako programista osadzony moim zadaniem jest sprawić, by niestandardowy sprzęt działał. Zazwyczaj opracowałem kilka programów na płycie deweloperskiej lub poprzedniej wersji sprzętu. Kiedy pojawia się nowa płyta, moim zadaniem jest umieścić na niej moje oprogramowanie i pokazać, że wszystko działa.

Ponieważ prawie zawsze występuje jakiś problem, niezbędne są umiejętności debugowania. Jeśli zewnętrzne urządzenie peryferyjne nie działa, czy jest to zły układ, złe połączenie z układem, błędny kod lub nieprawidłowe użycie urządzenia peryferyjnego? Jedynym sposobem na to jest rozległe debugowanie. Oznacza to wygodę korzystania z oscyloskopów, analizatorów sieciowych, analizatorów logicznych i debuggerów docelowych. Proces debugowania staje się niemal naukowy. Opracowuję hipotezę, projektuję eksperyment, aby dostarczyć dowodów na moją hipotezę lub przeciw niej, i testować.

Podczas oceny stażystów lub nowych inżynierów wbudowanych ta umiejętność jest najważniejsza. Każde oprogramowanie ma problemy, ale gdy zaczniesz łączyć się ze światami fizycznymi, różnorodność tych problemów rośnie wykładniczo. Istotą mojej pracy jest rozwiązywanie długiej serii problemów między koncepcją a rzeczywistością.

Ben Gartner
źródło
To prawda, że ​​debugowanie jest niezbędną umiejętnością dla indywidualnego wbudowanego programisty - szczególnie tego rodzaju debugowanie, które polega na spojrzeniu na wyświetlanie zakresu pamięci przymocowanego do ścieżek na płytce drukowanej w celu zdiagnozowania problemu z wbudowanym oprogramowaniem. :-) - Jednak większą zaletą zespołu inżynierów oprogramowania wbudowanego jest możliwość automatycznego wykrywania błędów dzięki zaawansowanym technikom testowania i kontroli jakości.
William Payne
5

Z mojego doświadczenia wynika, że ​​lepsze wyniki uzyskuje się przy tworzeniu oprogramowania systemu wbudowanego z kapeluszem „programisty” niż kapeluszem „inżyniera elektroniki”. (praktyki takie jak TDD i CI są mniej powszechne w inżynierii sprzętowej)

Z drugiej strony myślę, że doświadczenie w tworzeniu systemu wbudowanego czyni go lepszym; bardziej wszechstronny programista.

William Payne
źródło
2
Dokładnie tutaj, programiści osadzeni tutaj, branża potrzebuje więcej ludzi tutaj, ponieważ oprogramowanie staje się coraz bardziej skomplikowane, jesteśmy naprawdę źli w dobrych praktykach jakości oprogramowania.
Bjarke Freund-Hansen
Myślę, że CS również by się podobało, ponieważ pisanie oprogramowania wbudowanego jest jednym z najbardziej satysfakcjonujących (intelektualnie, jeśli nie finansowo) zadań, które może wykonać programista.
William Payne
3

Byłem w podobnej sytuacji około 8 lat temu. W tym momencie miałem 7 lat rozwoju oprogramowania w aplikacjach i środowiskach serwerowych. Moje jedyne doświadczenie w radzeniu sobie ze sprzętem na niskim poziomie wcześniej pisałem w asemblerze Z80 jako nastolatek w spektrum ZX.

To było z pewnością wyzwanie. Bardzo mi się podobało radzenie sobie z zestawami układów w asemblerze i na pewno wiele się nauczyłem o sprzęcie. Znaczną część mojej roli polegało na testowaniu sprzętu za pomocą oprogramowania, więc nauczyłem się radzić sobie z programowaniem i rozpoznałem, że twój błąd oprogramowania jest w rzeczywistości błędem sprzętowym. W rzeczywistości czasami oprogramowanie i sprzęt mogą potrzebować sporo pracy, aby ustalić, czy błąd jest sprzętem czy oprogramowaniem.

Jednym z aspektów, których nie dostarczyłem, była praca sterownika urządzenia. Nigdy tak naprawdę tego nie zrozumiałem, a ja i dyrektor tego przedsiębiorstwa nigdy nie zrozumiałem, dlaczego. To właśnie stał się faktem zaakceptowanym.

Niezbędne będzie zapoznanie się z oksyloskopem i jonem lutowniczym. pamiętanie, że kiedy facet od sprzętu mówi liczbę 26, ZAWSZE oznacza, że ​​0x26 jest przydatne. Uświadomienie sobie, że inżynierowie sprzętu uważają, że radzenie sobie z oprogramowaniem jest bardzo frustrujące, pomaga jednak projekt sprzętu, który nie obejmuje oprogramowania, nazywa się kablem.

Zostałem w tej roli przez 4 lata i odszedłem tylko dlatego, że byłem gotowany na naprawdę fantastyczną okazję.

Michael Shaw
źródło
Dziękujemy za podzielenie się wrażeniami z Ptolemeusza. Doceniam to.
Jeremy Heiler
W dzisiejszych czasach sporo kabli ma również mikroprocesory. :-)
William Payne
2

Jak wszystko wymaga zrównoważonego podejścia. Uwielbiam pracować z systemami wbudowanymi w mojej codziennej pracy. Sprawiają, że jestem lepszy w elektrotechnice. Obliczenia fizyczne i automatyzacja są bardzo ekscytujące. Z drugiej strony, tworzenie aplikacji internetowych i majsterkowanie w chmurze jest niesamowite.

Jeśli zrobisz to dobrze, strona oprogramowania będzie szukać sposobów na robienie rzeczy mądrzejszych i lepszych. Od strony sprzętowej będziesz uważny na zasoby i super wydajny.

mcotton
źródło
Dzięki za odpowiedź. Widzę, że jest w stanie trochę przesunąć pola, jeśli tylko nauczyć się niższych poziomów, a następnie trochę cofnąć się w górę stosu.
Jeremy Heiler
2

Nie jestem inżynierem elektrykiem, ale zrobiłem niewielką część oprogramowania wbudowanego. Największym problemem, jaki znalazłem, jest to, że mam znacznie bardziej podstawowe podstawy matematyki, więc nie wiem, jak łatwo rozbić złożoną serię zaawansowanych algorytmów matematycznych na kod bez dużej pomocy.

W przypadku wszystkich rzeczy, w których musiałem grać z sygnalizacją, odczytywać wartości z wejść, przekazywać dane do wyjść i tak dalej, uważam, że niewiele różni się koncepcyjnie od tego, co robię na co dzień, jako dobre staroświecki programista. Pisanie oprogramowania naprawdę jest tym, czym jest. To wtedy, gdy musisz wyjść poza rzeczywiste oprogramowanie, uważam, że sytuacja staje się trudna, ponieważ nie mam wiedzy, aby zadzierać bezpośrednio ze sprzętem. Zwykle dzieje się tak podczas próby debugowania lub testowania kodu. Jeśli masz naprawdę świetny łańcuch narzędzi, być może masz zintegrowane środowisko do debugowania i symulacji, aby usunąć większość bólu, ale nawet przy tym wszystkim, aby ci pomóc, czasami musisz wrócić do podstaw i przetestować kod na jakiś analizator, a rzeczywistość jest taka, że ​​większość wbudowanych platform nie „

Z tego punktu widzenia nie sądzę, że bycie inżynierem elektrykiem jest niezbędne do programowania wbudowanego, jeśli zadania są proste, a rzeczywiste wymagania sprzętowe są minimalne. Poza tym myślę, że bycie EE znacznie ułatwiłoby życie w pracy w środowisku osadzonym, szczególnie gdy prawdziwa nauka jest potrzebna, aby dowiedzieć się, gdzie są problemy.

S.Robins
źródło
„EE's Ouija-Board” - genialny, wiem to dobrze
Martin Beckett
2

Nie zrobiłem żadnego programowania wbudowanego na poziomie biznesowym, ale mój licencjat dotyczył głównie systemów wbudowanych, z których mam kilka lat prawdziwego doświadczenia. Użyliśmy C na Atmel AVR i dotknęliśmy chipów Texas Instruments za pomocą VHDL i mieliśmy trochę teoretycznych rzeczy na ARM.

W naszym przypadku było to w przybliżeniu 50-60 procent programowania (C), 20 procent planowania / projektowania (UML), a reszta to fizyczna elektronika (lutowanie, pomiary, okablowanie, tworzenie kabli itp.). Zgadzam się również, że było to bardzo interesujące i zabawne, i naprawdę chciałbym mieć karierę w systemach wbudowanych. Niestety, z bardzo małym rynkiem systemów wbudowanych, musiałem uciekać się do zwykłej starej Java EE.

Ale dygresję; Powiedziałbym, że powyższe wartości procentowe są bardzo zbliżone do miejsc pracy w świecie rzeczywistym, ponieważ nasi nauczyciele mają własne przedsiębiorstwa, a także wspominali, że postarają się uczynić to tak realistycznym, jak to możliwe. Mieliśmy nawet losowe obroty o 180 stopni w wymaganiach w połowie projektu, heh heh.

Co do stosu. Znajomość programowania wbudowanego daje ogromne szanse na stworzenie własnych i bardzo realnych produktów sprzętowych, które można byłoby wyprodukować w prawdziwych fabrykach w Azji, a następnie zmontować je u siebie (czy to w domu, czy we własnej firmie). To bardzo interesujące! Możesz także zrobić wiele gadżetów, które będą pomocne w domu, takich jak sterowane ruchem światła domowe, minutnik do ekspresu do kawy, aby automatycznie przygotować poranny Joe i tak dalej. Rzeczywiście ekscytujące rzeczy!

Juha Untinen
źródło