it-swarm-eu.dev

Je vestavěné programování blíže k elektrotechnice nebo vývoji softwaru?

Byl jsem osloven prací pro psaní vestavěného C na mikrořadiče. Zpočátku bych si myslel, že vkládání programování je pro mě příliš malé množství softwarového zásobníku, ale možná o tom přemýšlím špatně.

Normálně bych odložil příležitost napsat vestavěný kód, protože se nepovažuji za elektrotechnika. Je to špatný předpoklad? Dokážu napsat zajímavý a užitečný software pro vestavěné systémy, nebo se budu kopat kvůli příliš nízkému poklesu úrovně softwaru?

Šel jsem do školy pro informatiku a moc jsem si užíval psaní kompilátoru, přemýšlel o souběžných algoritmech, navrhování datových struktur a vývoji rámců. V současné době jsem však zaměstnán jako webový vývojář, který nekřičí zajímavé věci, které jsem právě popsal. (V současné době se zabývám problémy typu: „toto zaškrtávací políčko musí být 4 pixely vlevo“ a „toto datum je formátováno nesprávně“.)

Oceňuji vstup každého. Vím, že musím učinit rozhodnutí pro sebe, jen bych ráda objasnila, co to znamená být vestavěným programátorem, a pokud se hodí, co považuji za zajímavé.

35
Jeremy Heiler

Pokud chcete pracovat na vestavěných systémech, pak ano, musíte někdy přemýšlet jako EE. To je obvykle, když píšete kód pro rozhraní s různými periferními zařízeními (sériové sběrnice jako UART, SPI, I2C nebo USB), 8 a 16bitové časovače, generátory hodin a ADC a DAC. „Datové listy“ pro mikrokontroléry často naráží na stovky stránek, protože popisují každý kousek každého registru. Pomáhá číst schéma, takže můžete sondovat desku pomocí osciloskopu nebo logického analyzátoru.

Jindy se jedná pouze o psaní softwaru. Ale pod přísnými omezeními: často nebudete mít formální operační systém nebo jiný rámec a možná budete mít jen několik KB RAM a možná 64 KB programové paměti. (Tyto limity předpokládají, že programujete na menším 8 nebo 16bitovém mikroskopu; pokud pracujete s vestavěným Linuxem na 32bitovém procesoru, nebudete mít stejná omezení paměti, ale stále budete muset řešit jakékoli vlastní periferní hardware, pro který vaše distro Linux neposkytuje ovladače.)

Mám zázemí jak v EE, tak v CS, takže si užívám obě strany mince. Také dělám nějaké webové programování (většinou PHP) a desktopové aplikace (C # a Delphi), ale vždy jsem si užil práci na embedded projektech nejvíce.

33
tcrosley

@ tcrosley odpověď je vynikající. Nemusíte být elektrotechnik, ale znát základy vám pomůže.

Nemyslím si, že se musíte bát, že jste „příliš nízko na softwarový balík“. Jako vestavěný inženýr jsem musel vyřešit mnoho velmi zajímavých problémů. Uvádíte seznam úkolů, které se vám líbily:

  • Souběžné algoritmy - Řešení asynchronních přerušení hardwarové úrovně má tolik zajímavých výzev jako použití modelu podprocesu OS.

  • Navrhování datových struktur - Kontrola. Design pro kompaktnost a efektivní přístup.

  • Vývoj rámců - Kontrola. V systémech holých kostí můžete nakonec navrhnout mini-OS.

  • Psaní kompilátoru - možná ne, ale můžete skončit s optimalizací kódu nízké úrovně podobným kroku kompilátoru generování sestavení.

Pracoval bych na vestavěných systémech než na kódování uživatelského rozhraní každý den. Nikdy nezapomenete, když poprvé sledujete, jak se stroj začne pohybovat tak, jak jste jej naprogramovali. Je to mnohem uspokojivější než tlačení pixelů.

20
AShelly

Jako vestavěný programátor mám za úkol zajistit, aby vlastní hardware fungoval. Obvykle jsem vyvinul spoustu softwaru na desce dev nebo předchozí verzi hardwaru. Když přichází nová deska, je mou prací umístit můj software na tabuli a ukázat, že všechno funguje.

Protože je téměř vždy problém nějakého druhu, jsou nezbytné ladicí dovednosti. Pokud externí periferie nefunguje, je to špatný čip, špatné připojení k čipu, kód buggy nebo nesprávné použití periferního zařízení na čipu? Jediným způsobem, jak to zjistit, je rozsáhlé ladění. To znamená být pohodlný s osciloskopy, síťovými analyzátory, logickými analyzátory a cílovými debuggery. Proces ladění se stává téměř vědeckým. Vyvíjím hypotézu, navrhuji experiment, abych zajistil důkaz pro nebo proti mé hypotéze, a testuji.

Při hodnocení stážistů nebo nových vestavěných techniků je tato dovednost nejdůležitější. Veškerý software má problémy, ale jakmile začnete komunikovat s fyzickými světy, rozmanitost těchto problémů exponenciálně roste. Podstatou mé práce je řešení dlouhé řady problémů mezi konceptem a realitou.

6
Ben Gartner

Podle mých zkušeností lze dosáhnout lepších výsledků při vývoji softwaru vestavěného systému pomocí klobouku „vývojář softwaru“ než klobouku „elektronický inženýr“. (postupy jako TDD a CI jsou méně časté v hardwarovém inženýrství)

Na druhé straně si myslím, že zkušenosti s vývojem vestavěného systému zlepšují jeden; více dobře zaoblený vývojář softwaru.

5
William Payne

Asi před 8 lety jsem byl v podobné situaci. V té době jsem měl 7 let vývoje softwaru v aplikačních a serverových prostředích. Moje jediná zkušenost s řešením hardwaru na nízké úrovni byla předtím, než jsem psal v assembleru Z80 jako teenager na ZX spektru.

Určitě to byla výzva. Zjistil jsem, že zacházení s čipovými sadami v assembleru je velmi příjemné a rozhodně jsem se hodně naučil o hardwaru. Podstatnou součástí mé role bylo testování hardwaru pomocí softwaru, takže se naučit vypořádat se s programováním a rozpoznat, že vaše softwarová chyba je vlastně chyba hardwaru. Ve skutečnosti někdy může lidem se softwarem a hardwarem trvat docela dlouho, než zjistí, zda je chyba hardwarem nebo softwarem.

Jedním z aspektů, které se mi nepodařilo dodat, byla práce ovladače zařízení. Nikdy jsem to opravdu nepochopil, což je jedna věc, kterou jsem já a ten ředitel společnosti nikdy nechápali proč. Právě se to stalo akceptovaným faktem.

Nezbytné bude seznámení s očníkem a pájecím iontem. vzpomínáme, že když hardwarový chlap říká, že číslo 26 znamená vždy, že 0x26 je užitečný. Uvědomit si, že hardwaroví technici považují práci se softwarem za velmi frustrující, pomáhá, ale pak se hardwarový projekt, který nezahrnuje software, nazývá kabelem.

Zůstal jsem v této roli 4 roky a odešel jsem jen proto, že jsem byl pošírován za opravdu fantastickou příležitost.

3
Michael Shaw

Nejsem elektrotechnik, přesto jsem provedl malé množství vývoje vestavěného softwaru. Největším problémem, který jsem našel, je to, že mám mnohem více základních znalostí v matematice, takže nevím, jak snadno rozložit složitou řadu pokročilých matematických algoritmů na kód bez velké pomoci.

U všech věcí, kde jsem si potřeboval hrát se signalizací, číst hodnoty ze vstupů, odesílat data na výstupy, a všechny tyto druhy věcí, jsem našel to trochu koncepčně odlišné od toho, co dělám každý den jako dobrý staromódní vývojář softwaru. Psaní softwaru je opravdu to, co to je. Je to, když potřebujete jít za rámec skutečného softwaru, který mi připadá ponurý, protože nemám znalosti, abych si hrával přímo s hardwarem. K tomu obvykle dochází při pokusu o ladění nebo testování kódu. Pokud máte opravdu skvělý řetěz nástrojů, můžete mít integrované ladicí a simulační prostředí, které vám zbaví většinu bolesti, přesto však s tím, co vám pomůže, se někdy musíte vrátit k základům a otestovat svůj kód proti nějaký druh analyzátoru a realita je taková, že většina vestavěných platforem vám neposkytuje luxus více než základního kompilátoru a desky Ouija-Board EE, které vám pomohou.

Z tohoto pohledu si nemyslím, že být elektrotechnikem je pro vestavěné programování zásadní, pokud jsou úkoly jednoduché a skutečné požadavky na hardware jsou minimální. Kromě toho si myslím, že být EE by život mnohem jednodušší při práci ve vestavěném prostředí, zejména když je zapotřebí skutečná věda, aby zjistila, kde jsou problémy.

2
S.Robins

Neprováděla jsem žádné vestavěné programování na obchodní úrovni, ale moje bakalářská práce se týkala hlavně vestavěných systémů, z nichž mám několikaleté skutečné zkušenosti. Použili jsme C na Atmel AVR a dotkli jsme se některých čipů Texas Instruments s VHDL a měli jsme nějaké teoretické věci o ARM.

V tom, co jsme měli, to bylo zhruba 50-60 procent programování (C), 20 procent plánování/design (UML), a zbytek byla fyzikální elektronika (pájení, měření, zapojení, výroba kabelů atd.). Souhlasím také s tím, že to bylo velmi zajímavé a zábavné, a vlastně bych si přál, abych měl také kariéru ve vestavěných systémech. Bohužel, s velmi malým trhem s vestavěnými systémy, musel jsem se uchýlit k prostému starému Java EE.

Ale já odbočuji; Řekl bych, že výše uvedená procenta jsou velmi blízko skutečným pracovním místům, protože naši učitelé mají své vlastní podniky, a také se zmínili, že se budou snažit, aby to bylo co nejrealističtější. V polovině projektu jsme dokonce měli náhodné otočení o 180 stupňů, heh.

Pokud jde o hromadu. Znalost vestavěného programování vám poskytne obrovské šance na vytvoření vlastních a velmi reálných hardwarových produktů, které byste mohli vyrobit ve skutečných závodech v Asii, a poté je sestavit ve svých provozovnách (ať už doma nebo ve vaší vlastní společnosti). Je to velmi zajímavé! Můžete si také vyrobit mnoho pomůcek, které vám pomohou doma, jako jsou například hlídané domácnosti, časovač pro kávovar, který automaticky připraví vaše ranní joe atd. Skutečně vzrušující věci!

2
Juha Untinen

Jako všechno vyžaduje vyvážený přístup. Rád pracuji s vestavěnými systémy ve své každodenní práci. Zlepšují mě v elektrotechnice. Fyzické výpočty a automatizace jsou velmi vzrušující. Na druhé straně je úžasné vytvářet webové aplikace a pohrávat si s cloud computingem.

Pokud to uděláte správně, softwarová strana vás bude hledat způsoby, jak dělat věci chytřejší a lepší. Hardwarová stránka vás udrží zdroje a super efektivní.

2
mcotton