Milyen előnyei vannak az egyes nyelveknek az Arduino használatakor?
Úgy gondolom, hogy ez jó általános kérdés, de én “Hozzáadok egy kicsit arról, hogy miért kérdezem meg, akar-e valaki tippet adni nekem.
Tapasztaltam az előre feldolgozott nyelvekben, például a JavaScriptben, a PHP-ben, és olyan nyelvekkel foglalkoztam, mint a Java és a Visual Basic. Más szavakkal, ismerem a programozási technikákat, mind a klasszikus, mind a prototípusos objektumorientációt, de semmit a hardverrel való közvetlen kommunikációról.
Oktokoptert készítek, és arra gondolok, hogy egy objektumorientált megközelítés lesz a legkönnyebb. (A szoftver nagyon sok funkcióval fog rendelkezni …) Azonban még soha nem írtam C ++ nyelven.
Mivel ez egy Q & webhely, amelyet feltételezhetünk hogy segítsek másoknak, csak az elején bemutatott általános kérdésnek van nagy jelentősége, de nagyra értékelném a helyzetemre vonatkozó észrevételeket.
Hozzászólások
Answer
Saját professzori tapasztalatom (programozás, mechatronika) az, hogy ha van korábbi programozási tapasztalatod, és tisztában vagy az OOP-val kapcsolatos fogalmakkal, akkor jobb, ha a C / C ++ -ot választod. Az arduino nyelv nagyon jó kezdőknek, de vannak bizonyos korlátai (pl. Az összes fájlt ugyanabban a mappában kell tárolnia). És ez alapvetően a C / C ++ egyszerűsítése (gyakorlatilag átmásolhatja az & beilleszteni az arduino kódot egy C / C ++ fájlba, és ez működni fog). Szintén van értelme, hogy használhat egy teljesen ismert IDE-t fogyatkozásként:
http://playground.arduino.cc/Code/Eclipse
Kezdetben egy kicsit több szükséges a dev környezetének beállításához és konfigurálásához, de az IMHO-nak megéri azoknak a programozóknak, akik bármilyen más nyelven rendelkeznek tapasztalatokkal.
Bármelyikben Ebben az esetben nem árt, ha néhány napig elkezdi használni az arduino nyelvet és az arduino IDE-t, hogy megismerkedjen az arduino hardverével, majd áttérjen a C / C ++ -ra az Eclipse segítségével a projekt valódi fejlesztése érdekében.
Megjegyzések
- Köszönöm gondolatait. ‘ Az Arduino IDE használatával megtanulhatom az összes hardver vezérlését. darabokat, például szenzorokat és LCD-képernyőket stb. Akkor ‘ felmegyek a C ++ – ra, hogy elkészítsem az oktokopter szoftverét. Tudsz egy jó és rövid könyvet más nyelveket ismerők számára? A ” probléma ” sok könyveket, amelyekre ‘ megtaláltam, tartalmaznak-e annyi mindent, amire nincs szükségem ‘, mert nekem ‘ m egy kis Atmel mikrokontrolleren, nem pedig felhasználói felületen.
- Van egy szép könyv ” C programozás az Arduino számára ” írta Julien Bayle, ami hasznos. Ez a C nem C ++ nyelv, de segít megérteni az alapot.
- Ez egy jó kérés: egy rövid és jó könyv a C ++ alapjaival más nyelvű programozók számára. Sajnálom, hogy nem tudok ajánlásokat adni, nem ismerek jót. Valójában írtam egy könyvet, amelynek gyakorlati célja (videojáték fejlesztése) készült a hallgatóim számára, de ez csak spanyolul. Egy jó és praktikus C ++ könyvért a Deitel & Deitel A C ++ programozásához sok fejlett fejezetet kihagyhat.
- A C ++ támogatja az OO szolgáltatásait, C nyelv nem.
- @FriendofKim Nem pontosan erre gondoltam (bár technikailag megtehette, a Due elég gyors ahhoz, hogy támogassa a nem megabites soros kommunikációhoz szükséges szoftveres megoldást, és 5 U (S) ARTS-nal rendelkezik míg az Arduino könyvtárak csak 4-et biztosítanak belőlük, de a Due tábla egyébként nem biztosít csapokat az USART egyikéhez); az Arduino könyvtárak úgy konfigurálják az USART-kat, hogy aszinkron módot használjanak, de szinkronra volt szükségem akár 6Mbps sebességgel (és az SPI módot kellett használnom, mivel a bemenetet nyers bitfolyamként kellett kezelni, így nincsenek stopbitek / stb.), amely az alapértelmezett PIO vezérlő konfigurációjának módosítását is magában foglalta.
Válasz
Elméletileg …
Nem igazán Arduino nyelv, mint olyan. Valójában csak C ++, néhány tartományspecifikus könyvtárral. Ezek különféle funkciókat egészítenek ki, például azokat a funkciókat, amelyeket a hardver vezérléséhez hívhat. Ha nem rendelkeztek ilyen funkciókkal, akkor mindent közvetlenül ellenőrizni kell speciális regiszterekkel. A beágyazott programozás általában így történik. Gyors, de elég nehéz megtanulni és megérteni.
A függvények mellett a könyvtárak alternatív neveket adnak egyes típusokhoz. Például a boolean
és a byte
nem szerepel a C ++ szabványban. Ezek azonban közvetlenül egyenértékűek a bool
és a unsigned char
.
Mindezek azt jelentik, hogy valószínűleg általános C ++ kódot közvetlenül az Arduino-hoz, nehézség nélkül. A másik útra való visszalépéshez azonban kisebb szerkesztésre lehet szükség.
A gyakorlatban …
Mindezek ellenére az Arduino programozása nem teljesen ugyanaz, mint az általános C ++ programozás. Sok különbség azonban jellemző az összes beágyazott programozásra (például korlátozott memória és feldolgozási teljesítmény).
Azt is érdemes megjegyezni, hogy ha a hivatalos Arduino IDE-t használja, akkor mindenféle bosszantó furcsaságok és korlátozások vannak a kód beállításával kapcsolatban. Minden esetben vannak megkerülő megoldások (ha jól tudom), de néha meglehetősen frusztrálóak.
A teljes rugalmasság érdekében használjon egy harmadik féltől származó IDE-t (például Eclipse) egy beépülő modullal az Arduino támogatásához. Ennek meg kell adnia a C ++ összes előnyét, az Arduino könyvtárakkal együtt.
Megjegyzések
- Itt ‘ s az Eclipse beállítása, amely jól működik az Arduinóval. arduino.stackexchange.com/a/75491/7727 . Nem használok Arduino beépülő modulokat, csak tiszta Eclipse-t a C / C ++ -hoz.
Válasz
iv class = “answer”>
Milyen előnyei vannak a C ++ -nak az Arduino nyelvvel szemben az Arduino használatakor? Olyan előre feldolgozott nyelvekben tapasztaltam, mint a JavaScript, a PHP, és olyan nyelvekkel babráltam, mint a Java és a Visual Basic.
Először is, az Arduino fordító / IDE elfogadja C és C ++, ahogy van. Valójában a könyvtárak sokasága C ++ nyelven íródott. Az alapul szolgáló rendszer nagy része nem objektumorientált, de lehet.
Így az “Arduino nyelv” C ++ vagy C.
A C ++ nem hulladékgyűjtő. A változókat a terjedelemben kezeli – ha ezt írja:
int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } }
Akkor megtalálja hogy led
és i
ne nőjön vagy szivárogjon, függetlenül attól, hogy hányszor hívja a blinkTimes
.
Ha a i
osztály lenne, akkor a függvény leállítása után hasonlóan megsemmisítenék. Tehát amíg nem használja a new
vagy hasonló memóriaelosztási funkciók új objektumok létrehozásához, akkor nem kell aggódnia a szivárgások miatt.
Ha létrehoz, akkor is kifogyhat a memóriából. hatalmas osztályokat használ, és sokat használ belőlük mélyen beágyazott funkciókban, de általában addig nem fog bajba kerülni, amíg nem kezd el foglalkozni new
és free
függvények.
Ha a new
szolgáltatást használja, akkor meg kell hívnia a delete
megfelelő időpontokban. A C ++ és kiterjesztésében az Arduino nem rendelkezik automatikus szemétszállítással, kifejezetten kezelnie kell a saját memóriáját.
Megjegyzések
- Rendben, ha példányosított objektumok (újdonságokkal) areen ‘ t szemetet nem gyűjtenek, ezt én is meg kell tanulnom ‘. Feltételezem, hogy minden, a C ++ -ról szóló könyv ezt lefedi. Köszönöm a jó választ!
Válasz
— 170412 frissítés
Az eredeti példányt írtam válaszoljon három évvel ezelőtt abból a szempontból, hogy létezik egy különálló “Arduino C ++”. Az IDE-ben használt nyelv normál C ++, mert azt a GNU C ++ fordító valósítja meg. A “látszólagos” különbségek azért kúsznak be, mert az IDE néhány előfeldolgozást végez annak érdekében, hogy a nyelv újonnan érkezőinek elkerüljék néhány “gotcha” -ot néhány #includes, f / ex kitöltésével. De írhatsz rá – és én is – írok rá helyes C ++ – t, és megkapod azt, amire számíthatsz.
— frissítés befejezése
A C ++ nyelvi funkciók használatát korlátozd azokra, akiknek a megvalósítását te használod teljesen megért. Van néhány olyan szolgáltatás, amely erőforrás-igényesebb kódra fordul, mint ami a forráskód olvasása során nyilvánvaló. Az opcionálisan létrehozott .lss (egyesített forrás és összeállítás) felsorolás jó betekintést nyújthat abba, hogy mit tett a C ++ fordító, amikor nem keresett.
A memóriával kapcsolatos kérdésére: A C ++ nem szemetet gyűjt. A verem alapú nyelvek, mint például a C és a C ++, ideiglenes tárhelyet osztanak ki a veremben az automatikus változók számára a függvény megadásakor, amelyet aztán a funkció visszatérésekor felszabadítanak, de ez nem igaz a szemétgyűjtésnél. A halom- vagy globális memóriában létrehozott objektumok addig élnek, amíg kifejezetten nem törli őket. Győződjön meg arról, hogy tudja, hol, mikor és meddig készülnek különféle típusú objektumok. Valóban nem akarod, hogy a kódod new
-ing és delete
-kódokat akarva-akaratlanul. Halom memóriába fogják építeni, szétaprózza, és felnövekszik a verembe. Ekkor összeomlik a kódja – és a kedves másolója.
A C kevesebbet tesz érted, így kevesebbet tehet neked neked. Ez nem rossz választás. A C néhány C ++ funkcióval még jobb választás lehet, ha megfontoltan választja az extra szolgáltatásokat.C ++, ha ez a két választása:
[Eredeti válasz] – A C ++ szabványosított nyelv . Sok környezetben, beleértve a beágyazott rendszereket is, széles körben alkalmazzák, és ezért alaposabban tesztelték, mint a nagyon hasonló C ++ nyelvet, amely az “Arduino”. Ez különösen fontos az olyan küldetéskritikus / biztonsági szempontból kritikus alkalmazások esetében, mint amilyeneket Ön tervez. Az összeomlott kód összeomlott “helikoptert jelent, és még ha nem is bánt valakit, összetöri a drága gépét.
-
Mivel a C ++ szabványos, hordozható. Frissítenie kell a processzorát? A szilícium-specifikus kód kivételével minden átkerül az újba. Meg kell változtatni az eszközkészletet, a fejlesztői rendszert, a gazdagép operációs rendszert? C ++ Bár az Arduino IDE bárhol fut, ahol a Java támogatott, ez az egyetlen eszköz, amely az Arduino C ++ szoftvert használja, és nagyon korlátozott l. Ha az Eclipse-t, az AVR-eszközöket szeretné használni, mezítláb lépjen a parancssorba, fejlesszen az Emacs-en belül, vagy bármely más környezetben, amelyet előnyben részesít, a szabványos C ++ verzió támogatott lesz.
-
Az Arduino IDE a hátad mögött végzi a dolgokat – konkrétan #be foglalja a .h fájlokat, amikor úgy gondolja, hogy szükséged van rájuk. Még ha helyes is, valóban meg akar írni, vagy legalábbis látni és megérteni mindazt, amit a fordító látni fog. A programozási nyelvek nem készülnek a számítógépek számára (a számítógépek reggelit fogyasztanak), hanem az emberek számára készültek, különös tekintettel azokra, akik követik Önt a projektben, akik közül a legfontosabb lehet … te !, amikor 6 hónap múlva modult írt, vissza kell térnie, hogy továbbfejlessze, vagy valószínűbb, hogy kijavítsa. Nagyon szeretné látni mindazt, amit a fordító lát.
Megjegyzések
- Ez TÉNYLEG jó válasz . Világosnak tűnik, hogy tetszik a C ++, és nekem is tetszeni kell! … De komolyan: ‘ jobbra ugrok a C ++ -ra, amint megértettem ‘, hogy megértettem a ” kommunikáció ” a különböző érzékelőkkel stb. működik.
- Tudsz jó könyveket a témáról? (Nekem való, aki évek óta programoz más nyelveken, és csak a C ++ ” beágyazott részére van szükségem.)
- Ön szerint a gyorsított C ++ jó könyv ehhez?
- bárcsak tudnék segíteni a ‘ jobbra ‘ könyv, de a C ++ -ra jöttem, sok C-vel a hátam mögött és Kernighan & Ritchie ‘ s A C programozási nyelv továbbra is a könyvem (rossz szójáték) minden olyan dologra, amely nem kifejezetten C ++, és Ellis & Stroustrup ‘ s A C ++ kommentált C ++ kézikönyve . De hardveres íráshoz ‘ jól teszi, ha megnézi azokat az eszközkönyvtárakat, amelyekhez a felhasználók a Arduino.cc
. Indítsa el az I / O portok módosítását a pinMode (), a digitalWrite () és a digitalRead () függvényekkel, majd az analóg i / o társaikkal, és végül … - … tervezi, hogy közvetlenül ír Az I / O regiszterek a sebesség és a memóriaterület fejlesztése érdekében. Az olyan programok, mint a blinky.cpp és a hello.cpp, jó helyek a hardveres kezdéshez. Adjon hozzá egy egyszerű multimétert és néhány LED-et a megfelelő áramkorlátozó ellenállásokkal, amelyeket állandóan az egyik lábára forrasztanak, és képesnek kell lennie arra, hogy meglássa valódi, ha egyszerű eredményeit. Ezt követően olvassa el az Ön számára érdekes hardver adatlapjait, hogy megtudja, milyen jeleket tud olvasni / írnia nekik, hogy lejátszhassák őket. A hőmérséklet-érzékelők könnyen használhatóak, és nem mindenkinek szüksége van hűtőszekrény-naplózóra? Jó szórakozást!
Válasz
Az Arduino nyelv az C ++, de ez nagyon különbözik a legtöbb C ++ fajtától.
C++ vs. The Arduino Language?
– Az ” Arduino nyelv ” is C ++. Van egy kis előfeldolgozás a funkcióprototípusok megmentése érdekében, de ez határozottan a C ++.