Beágyazott programozást akarok tanulni: Felnőttképzés vagy "csináld magad"?

Sziasztok! Főállásban alkalmazásokat fejlesztek, és szeretném a tudásomat fejleszteni. Mindig is érdekelt a beágyazott programozás és érdekelnének a vélemények, tapasztalatok azzal kapcsolatosan, hogy ezt hogyan is lenne érdemes elkezdeni, kivitelezni. Keresgéltem már a felnőttképzés témájában, de arra már rájöttem, hogy jelentős hátrányt jelent az ha az ember teljes munkaidőben dolgozik ÉS ráadásul nem is Pesten lakik. Ha autodidakta módon akarok ezzel foglalkozni, akkor hogyan álljak neki úgy, hogy később azért értelmesebb dolgokat is alkotni tudjak?

Hozzászólások

Miért akarsz beágyazott irányba menni, és milyen területre gondolsz? Milyen alkalmazásokat fejlesztesz most?

Beágyazott dolgokat is lehet sokféle programozási nyelven, sokféle technikát használva programozni, úgyhogy ez önmagában nem nagyon szűkíti le a tanulandó dolgokat. Az sem teljesen egyértelmű, hogy mi számít beágyazottnak, a mobiltelefon manapság beágyazottnak számít vagy nem? Vagy ha egy routeren futtatsz torrentet, az beágyazott?

Ilyen mikrokontrolleres C-ben programozott dolgokkal akarsz foglalkozni? Ezekre gondolsz?

Azért kérdeztem, mert ha professzionális szinten is érdekel, akkor tudtommal Misra-C programozóból hiány van, belépő szinten én azt tanulnám. Autóipari vagy hasonló projektekbe lehet bekerülni bele.

A Misra-C-t érdemes akkor is legalább átolvasni, ha nem professzionálisan foglalkozol vele, igazából mindenkinek ismernie kellene, aki C-ben programozik.

Tudtommal van teljesen kezdőknek szánt átképző tanfolyam is belőle. Mondjuk ha már programozol, akkor talán neked nem pont az a tanfolyam kell, hanem programozóknak szánt.

Nem biztos, hogy a te esetedre is ráhúzható, de...

Én infobiztonság irányban akartam a meglevő többé-kevésbé felületes tudásomat tágítani, de tudtam, hogy az infosecnek bőven van olyan része, aminek a megtanulására magamtól nem vinne rá a lélek. Jog, szabályozás (különösen a helyi jellegzetességek: például Ibtv, Mavtv), szabványok, stb. Ezért beiratkoztam egy szakirányú továbbképzési szakra, két félév, 175000 ft/db. Most leverik rajtam ezt is, plusz mivel fix időben van, könnyebb ráállni a ritmusra és nem elbliccelni a tanulást. Ennyit megért.

Arduinohoz felesleges egy kepzes.
Felmesz e-bay-re/alira, rendelsz magadnak hozzavalokat, neten meg van tutorial mindenfele formaban. Ha videot szeretsz nezni, youtube, ha olvasni, az is van, ha elakadsz, vannak forumok. A feladatokat celszeru meg kitalalni, de a nepszerubb modulokhoz/eszkozokhoz talalsz libet, ott meg a peldakodok kozt sokszor vannak ertelmesek.

Aztan ha unod, elmehetsz sima atmel iranyba (project kicsinyitese), vagy ARM/ESP vonalra is (utobbiak is mennek Arduino frameworkkel, legalabbis amihez megcsinaltak).

szerk: meg egy dolog: az elore osszeallitott arduino kitek sokszor tularazottak, foleg, ha felesleges dolgok is vannak benne. Ha megnezed mik kellenek, es abbol rendelsz par darabot, jobban kijohetsz. De teny, hogy egyszerubb megvenni a kitet.

--
If you get a good wife, you'll become happy; if you get a bad one, you'll become a philosopher. -Socrates

+1 Találj ki magadnak projektet és kezdd el csinálni! Ahol épp elakadsz, azt keresd, vagy fórumozd ki - akár itt is.

Én mostani fejemmel készlettel kezdeném, ez pl 100 dollár: https://www.sparkfun.com/products/14265 Itt írtam róla: https://hup.hu/node/159698

(Mindenképp Arduino UNO kompatibilis boardot vennék, mert ahhoz van a legtöbb információ. Aztán ha már érzed a határait, akkor már tudni fogod mi kell helyette inkább.)

De ha nem is akarsz készletet, a füzetet ingyen letöltheted, és a példaprogramokat is. Kinézheted, hogy mit csinálnál meg belőle, ahhoz veszel alkatrészeket, és usgyi csinálhatod is. Távirányítós járgány például inspiráló első cél lehet. Vehetsz hozzá Bluetooth shieldet, akkor telefonos appról direktben vezérelhető. Régen csináltam egy olyat, hogy az Android G szenzora alapján irányított Bluetooth-hal a telefon és azzal arányosan ment a robot. Volt rajta egy kis daru is, és anyira pontosan irányítható lett, hogy kis csavarokat fel tudtam venni vele a földről. Ehhez a projekthez az eszközlista:

* Arduino
* BT shield
* elemtartó - legjobb, ha külön veszel le feszültséget az Arduino-nak és a szervóknak mert eltérő a tápfeszük. Érdemes kapcsolósat venni
* pl Merkur építőkészlet
* 2 körbe-forgó szervó a meghajtásnak
* 2 "integető" szervó a darunak

Vagy a Sparkfun inventor kitből megrendelheted a motor drivert és motorokat, ha nem szervóval, hanem motor+diverrel akarsz nyomulni.

A hestore.hu-nál például egész használható dolgokat lehet venni hobbi célokra.

Az én tapasztalatom az, hogy napi munka során lehet a legtöbbet és leggyorsabban tanulni.
Ha biztos az elhatározásod, akkor próbálj olyan cégeket keresni, akik ilyennel foglalkoznak, mert a lelkes embereket mindenhol szeretik. Viszont ne a senior szintet lődd be a fizetés igénynél, hogy lássák, hogy komolyan gondolod.
Ha jól csinálod, akkor hamar emelkedik a fizetésed, mert égető a hiány ezen a területen.
Hajrá:
Gábor

Az embedded jelentése jelentősen megváltozott az utóbbi 5-10 évben. Ma mindent embdded -nek titulálnak ami "célhardveren" fut. Pl. egy router -en futó Linux, és így a rajta futó Apache is "embedded". Ami talán szerencsésebb megkülönböztetés, és jobban is tükrözi az embedded hagyományos jelentését, az a rendszer programozás (system programing vagy low-level programing) illetve az alkalmazás fejlesztés.

Ami a korábbi hozzászólások szerint téged érdekel az a rendszer programozás. Ebben a témakörben érdekes olvasmány lehet ez: https://github.com/s-matyukevich/raspberry-pi-os. Jó példája, hogy egy nagy teljesítményű hardveren nagyjából milyen az élet.

Javaslom továbbá megismerkedni illetve gyakorlatozni pl. evvel és/vagy evvel. Vegyél egy stm32discovery kitet. Pár ezresbe fáj, minden van rajta ami a fejlesztéshez kell, és majdnem minden open-source cucc támogatja. A fenti két projekt megtanít az alapokra. (Make fájlok, ARM specifikus fordítók, linker command fájlok, mi történik a main() előtt, stb...). Megtanulod az alapvető munkamódszereket/eszközöket is (cross compiling, JTAG/SWD debugging, OpenOCD, stb...)
Egyszer olvastam valami tetszetős könyvet is a témában. Talán ez volt az.

Ha ezzel megvagy, érdemes valamilyen kütyüt építeni. Pár szenzor, servo illetve DC motor vezérlés. Ennek kapcsán megtanulsz alapvető protokollokat (I2C, SPI, stb..) illetve perifériákat kezelni. (Pl. egy programozható lánctalpas robot.)

Ja, igen: mielőtt nagyon bele szerelmesednél az RTOS -okba (első 2 link), érdemes összerakni egy RTOS nélküli projektet. Teljesen más szemléletet igényel.

Az Arduino sem rossz, de ez a vonal inkább a kész modulokból való legozáshoz hasonlít, ami teljesem más, mint amire rendszerprogramozói területen szükség van. Arduino akkor jó, ha gyorsan valamilyen feladatra össze kell dobni valamit (protontipizálás/egyedi automatizálás).

Hát srácok, köszönöm mindenkinek egyenként a kommenteket, sokat segítettetek! Már tudom hogyan érdemes elindulni.
Szeretek mindig valami újat tanulni, de ez pláne érdekelt. Most fel tudok tankolni...
Nyilván aki még hozzá akar fűzni valamit az ne tartsa magában.

Beepulni es belulrol bomlasztani. Ez a legbiztosabb strategia.

Peldaul az NNG-nel (van irodajuk Szegeden is) keresnek tobbfele fejlesztot, tehat elmesz hozzajuk, mint Javascript UI fejleszto vagy backendes, es bent csondben (vagy - ha ertelmes ceg - hivatalos uton) atkerulsz az embedded fejleszto csapathoz.

Szamtalan hasonlo peldat lattam palyafutasom soran, sot, en is csinaltam ilyet.

Ez jol hangzik, de pont a mikrokontrolleres dologban nem segit, foleg, ha JS vagy server oldalrol jonnel. Beagyazott Linux/QNX van a legkozelebb a cegben ahhoz, amit - azt hiszem - szeretne.
Egyebkent sokkal tobb ennel az Android, a WinCE (talan meg mindig), iOS, meg persze az "altalanos" dolgok: a fejlesztok nagy resze PC-n fejleszt. A Services (backend) csapataval max. ceges focin talalkoztam. Volt par mikrokontrolleres/Arduinos kollega, mind szabad idejukben, hobbibol foglalkoztak ilyesmivel. (3 evig dolgoztam ott.)

--
If you get a good wife, you'll become happy; if you get a bad one, you'll become a philosopher. -Socrates

Nyilvanvaloan akarmilyen programozasban segit, ha mar tudsz valamiben programozni. Ez nem is kerdes. Ha az ismert es a tanult nyelv hasonlit (pl. c-like szintaxisa van, azonos paradigmat hasznal, stb.), az meg jobb.

De nem is erre reagaltam.

A threadben a hozzaszolo azt ajanlotta, hogy a topicgazda jeletkezzen az NNG-hez (az iGO fejlesztocsapata, korabbi munkahelyem), majd ott megtanulja. Erre irtam, hogy ott tuti nem. Foleg, ha JS/backend allasra palyazik.

De valoban vannak olyan (foleg kisebb) cegek, ahol van ilyenre lehetoseg.

szerk: egyebkent a win+android tapasztalataval siman felvennek

--
If you get a good wife, you'll become happy; if you get a bad one, you'll become a philosopher. -Socrates

nem csak egy magon és nem csak egy processz fut

Ha meg lehet csinálni olcsó, pár száz forintos mikrokontrollerrel, akkor úgy kell, mert különben elviszi a hasznot, ha nagy hardware-t teszel oda, ahova nem való. Meg lehet szempont a fogyasztás is akár.

Aztán a DSP-k is egy szép világ. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Az Edx-en is nézz szét, van pár embedded kurzus.

Én mikrokontrollerre hobbiként tanultam meg programozni, s kizárólag assembly-ben. Ez viszont nem tartható minden architektúrán, mert vannak eszközök, amelyekre gyakorlatilag képtelenség assembly-ben programozni.

Ami kell hozzá, hogy legyen valamiféle fizikai képed úgy általában, elképzelésed az elektronikáról, amit vezérelsz. Tegyük fel, legyen méréstechnika. Mit mérünk, milyen módszerrel? Aztán hogyan kell ahhoz mérned, hogy ne veszíts információt a hasznos jelből, de elimináld a zajokat? Vannak eléggé bonyolult, érzékeny mérések, amelyhez elég csúnya matematika is tartozik adott esetben, hogy abból a borzalomból, amely rendelkezésedre áll, csinálj valami értelmezhető, használható, s leginkább a valósággal korreláló, pontos dolgot. Igazolhatóan, beláthatóan pontos dolgot, amelynek a pontatlanságára tudsz konkrét számot mondani.

Egyáltalán milyen specifikáció adódik ki a követelményekből? Ahhoz, hogy adott sebességgel és pontossággal mérj, milyen gyorsan, s milyen kvantálással kell majd mérned? Felismered-e, hogy lehetnek olyan helyzetek, amikor a zaj segít a mérésben? Persze, ha determinisztikus a zaj, akkor nem igazán. Viszont amikor mérsz, ne vezérelj semmit úgy, hogy az determinisztikus zajt generáljon.

Hogyan fognál neki, ha gyorsan és pontosan kellene hőmérsékletet szabályozni? Beágyazott rendszerek igen sok esetben valós idejűek, így nincs alattad operációs rendszer, csak a hardware, a fejlesztői környezet és a fantáziád.

Mindenképpen más szemléletet igényel, mint a felsőbb szinten történő programozás.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azért kíváncsi lennék, hogy a tanácsot adók közül hányan dolgoznak valóban az adott területen, és hányan hobbisták...

Ez az, amire sohanem fogod megtudni a választ. ;)
Ti. ehhez előbb meg kellene tudni mi az az emmbedded rendszer.
Pl.:
- Arduino (és mekkora, milyen nyelven)
- PIC (és mekkora, milyen nyelven)
- egy okostelefon (és milyen oprendszerrel), avagy
- mindazok a hardverek, amelyeken nem linux és nem Windows fut
- vagy embedded linux vagy embedded Windows
- vagy Dos, de nem pécén
- vagy pécén, de egyedi oprendszer
- vagy egyedi hardveren egyedi oprendszer (és milyen nyelven)

Biztos lehetne tovább permutálni. :-D

Tehát a konkrét igen/nem válaszhoz kellene egy táblázat...

Ez valóban definíciós probléma. Ezek közül nekem több is tetszik. A Win CE és Linux is - például OpenWrt/LEDE - nevezhető embeddednek. De ami egészen új lehet egy eddig magas szinten programozónak, amikor a hardware-es kollégája mutat egy kapcsolási rajzot azzal, hogy most került gyártásba, 4 hét múlva jön meg a szerelt nyák, kellene rá írni firmware-t, van rajta egy rakás kommunikáció, szenzor, mérnivaló, szabályoznivaló, PWM, akármi, tudjuk, mit akarunk csinálni, aztán hajrá! :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha speciális az eszköz, akkor igen. De egy általános célú mikrokontroller esetén nem látom értelmét a demo boardnak, mert csak a valós környezetben, valós feladatot ellátva nyer az egész értelmet, magában nem tesztelhető a program.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Arra akartam kilyukadni, hogy mikrokontroller hardware-hez közel kell. Egy hőmérséklet szabályozást, annak dinamikáját, vagy egy léptetőmotor vezérlését, esetleg egy DC motoros szabályozott hajtást nem tudom, hogyan lehet szimulálni. Illetve nyilván mindent lehet, csak egyfelől nem biztos, hogy megéri, másfelől nem vagyok meggyőződve, hogy egy szimulációnak meg tudod adni a helyes modellt, azt, hogy a valódi mechanikának milyen súrlódási együtthatója van, hol megy telítésbe a vas a motorban, milyen hatása van annak, ha elfogy a tápfeszültség, s keletkezik egy rakás felharmonikus a vezérlésben, mikor omlik össze a táp, mert netán alul van méretezve a tápegység. Egy firmware-ben meg tudod tenni, hogy kevésbé gyorsítod azt a villamosgépet, s nem lesz akkora áramfelvétele, de szerintem ehhez valós környezet kell. Meg az is érdekes lehet, tartós üzemben mennyire melegszik fel a gép az adott környezetben.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha űrhajóról lenne szó, akkor lemodelleznék mindent, és úgy szimulálnám :-).

Motor vezérlés esetén például egy PID vezérlőt megcsinálnék, amit néhány féle bemenettel tesztelnék, hogy egyáltalán PID vezérlőként működik-e. Adagol-e több kakaót amikor kell, nincs-e előjelhiba, túlcsordulás, stb. Ezekre regressziós teszteket is lehet csinálni akár, ha legalább egy csokker modellünk és tudjuk a szabályzókört PC-n futtatni. Aztán a konkrét együttható paramétereket a prototípuson állítgatnám be. Arra az esetre lehet ez jó, amikor tényleg az van, hogy hetekig csak vársz a vasra, amikor meg megjön, akkor azonnal kellene produkálni az eredményt.

Amire nagyon hasznosnak találtam a szimulációt, az a user interface - feltéve hogy van olyan. Gombokkal vezérelt menűk, LED-ek, stb nagyon jól szimulálhatóak és nagyon könnyű végigpróbálni, hogy minden klappol-e. És mivel ez a rész nem a valósidejűségről szól, többnyire a valóság tényleg olyan is lesz, mint a szimuláció.