C ++ vs. jazyk Arduino?

Jaké jsou výhody každého jazyka při používání Arduina?

Myslím, že je to dobrá obecná otázka, ale já „Přidám něco o tom, proč se ptám, jestli mi někdo chce dát tip.

Mám zkušenosti s předzpracovanými jazyky, jako je JavaScript, PHP, a umím pracovat s jazyky jako Java a Visual Basic. Jinými slovy znám programovací techniky a klasickou i prototypovou objektovou orientaci, ale nic o přímé komunikaci s hardwarem.

Dělám oktokoptéru a myslím si, že objektově orientovaný přístup bude nejjednodušší. (Software bude mít mnoho funkcí …) Nikdy jsem však v jazyce C ++ nenapsal.

Jelikož se jedná o Q & web, o kterém se předpokládá Abychom pomohli ostatním, má velký význam pouze obecná otázka uvedená na začátku, ale oceňuji jakékoli komentáře k mé situaci.

Komentáře

  • Vyhněte se Arduino IDE, protože si nezaslouží svůj název IDE, je to dokonce velmi špatný editor: může to být dobré pro začátečníky a jednoduché skici, ale člověk by měl rychle přejít na něco lepšího.
  • Toto je poměrně stručné rozdělení toho, co se rozumí (a co ‚ ve skutečnosti pod kapotou) “ Programování Arduina Jazyk. “
  • C++ vs. The Arduino Language? – “ jazyk Arduino “ je C ++. Existuje trochu předzpracování, které vám ušetří provádění prototypů funkcí, ale rozhodně je to C ++.
  • Neexistuje nic jako jazyk arduino. Je to prostě knihovna.
  • Není to příliš spojené s otázkou, co se týče komentářů: Atmel studio je zdarma a IMHO je lepší než vizuální studio pro arduino programování. Podporuje také plugin Visual Micro, i když to není vůbec nutné pro programování a ladění arduinos.

Odpovědět

Moje osobní zkušenost jako profesora (programování, mechatronika) je, že pokud máte předchozí zkušenosti s programováním a znáte koncepty jako OOP, je lepší jít na C / C ++. Jazyk arduino je opravdu skvělý pro začátečníky, ale má určitá omezení (např. Musíte mít všechny soubory ve stejné složce). A je to v podstatě zjednodušení C / C ++ (můžete prakticky zkopírovat & vložit arduino kód do souboru C / C ++ a bude to fungovat). Dává také smysl, že můžete použít plně známé IDE jako zatmění:

http://playground.arduino.cc/Code/Eclipse

Zpočátku je vyžadováno trochu více nastavení a konfigurace vašeho vývojového prostředí, ale IMHO to stojí za to pro programátory se zkušenostmi v jakémkoli jiném jazyce.

V jakémkoli V takovém případě vám neublíží začít používat arduino jazyk a arduino IDE na několik dní, abyste se seznámili s hardwarem arduino a poté se přesunuli do C / C ++ s Eclipse pro skutečný vývoj vašeho projektu.

Komentáře

  • Děkuji vám za myšlenky. ‚ používám IDE Arduino k tomu, abych se naučil ovládat veškerý jiný hardware kousky jako senzory a LCD obrazovky atd. Pak se ‚ ll přesunu do C ++, abych vytvořil software pro octocopter. Znáte dobrou a krátkou knihu pro lidi, kteří znají jiné jazyky? “ problém “ s mnoha knihy, které jsem ‚ našel, obsahují tolik, že je nepotřebuji ‚ „894f8734e3“>

m spíše na malém mikrokontroléru Atmel než na počítači uživatelského rozhraní.

  • Existuje hezká kniha “ C Programování pro Arduino “ od Julien Bayle, což je užitečné. Není to jazyk C, ale jazyk C ++, ale měl by vám pomoci pochopit základ.
  • To je dobrý požadavek: krátká a dobrá kniha se základy jazyka C ++ pro programátory jiných jazyků. Omlouvám se, nemohu dát žádná doporučení, nevím o žádném dobrém. Ve skutečnosti jsem pro své studenty napsal knihu s praktickým zaměřením (vývoj videohry), ale je pouze ve španělštině. Pro dobrou a praktickou knihu v C ++ bych doporučil Deitel & Deitel Jak programovat C ++, můžete přeskočit mnoho pokročilých kapitol.
  • C ++ podporuje funkce OO, jazyk C ne.
  • @FriendofKim Není to přesně to, co jsem měl na mysli (i když jsem to technicky mohl, Due je dostatečně rychlý na to, aby podporoval softwarové řešení pro ne-megabitovou sériovou komunikaci, a má 5 U (S) ARTS celkem zatímco knihovny Arduino poskytují pouze 4 z nich, ale iirc deska Due neposkytuje kolíky pro jednu z USART stejně); knihovny Arduino konfigurují USART tak, aby používaly asynchronní režim, ale potřeboval jsem synchronní rychlost až 6 Mb / s (a musel jsem použít režim SPI, protože se vstupem muselo být zacházeno jako se surovým bitovým tokem, takže žádné stop bity / atd.)), což zahrnovalo také úpravu výchozí konfigurace řadiče PIO.
  • Odpověď

    Teoreticky …
    Ve skutečnosti neexistuje Arduino jako takový. Je to opravdu jen C ++ s některými knihovnami specifickými pro doménu. Přidávají různé funkce, například funkce, které můžete zavolat pro ovládání hardwaru. Pokud jste tyto funkce neměli, budete muset pohrávat přímo se speciálními registry, abyste mohli vše ovládat. Takto se obvykle provádí vestavěné programování. Je to rychlé, ale může být docela těžké se mu naučit a porozumět.

    Kromě funkcí přidávají knihovny pro některé typy alternativní názvy. Například boolean a byte nejsou ve standardu C ++. Jsou však přímo ekvivalentní bool a unsigned char.

    Všechny tyto věci znamenají, že pravděpodobně můžete portovat obecné C ++ kód přímo do Arduina bez problémů. Návrat na druhou stranu však může vyžadovat drobné úpravy.

    V praxi …
    Po tom všem, programování pro Arduino není úplně stejné jako obecné programování v C ++. Mnoho rozdílů je však společné pro všechny vestavěné programování (například omezená paměť a výpočetní výkon).

    Také stojí za zmínku, že pokud používáte oficiální Arduino IDE, pak existují nejrůznější otravné vtípky a omezení, jak nastavíte svůj kód. Ve všech případech existují řešení (pokud vím), ale někdy jsou docela frustrující.

    Pro plnou flexibilitu použijte IDE jiného výrobce (například Eclipse) s doplňkem pro podporu Arduina. To by vám mělo poskytnout všechny výhody jazyka C ++ spolu s knihovnami Arduino.

    Komentáře

    Odpovědět

    Jaké jsou výhody jazyka C ++ oproti jazyku Arduino při používání Arduina? Mám zkušenosti s předzpracovanými jazyky, jako je JavaScript, PHP, a pohrával jsem si s jazyky, jako je Java a Visual Basic.

    Nejprve Arduino kompilátor / IDE přijímá C a C ++ tak, jak jsou. Ve skutečnosti je mnoho knihoven napsáno v C ++. Velká část základního systému není objektově orientovaná, ale mohla by být.

    Tedy „jazyk Arduino“ je C ++ nebo C.

    C ++ není shromažďováno odpadky. Spravuje proměnné v rozsahu – pokud píšete:

    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); } } 

    Pak najdete že led a i nerostou ani neunikají, bez ohledu na to, kolikrát zavoláte blinkTimes.

    Pokud by i byla třída, bylo by s ní podobně vyřazeno, jakmile funkce skončí. Takže pokud nepoužíváte new nebo podobné funkce pro přidělování paměti k vytváření nových objektů, pak se nebudete muset starat o úniky.

    Stále vám může dojít paměť, pokud vytvoříte obrovské třídy a hodně jich používáte v hluboce vnořených funkcích, ale obecně se nedostanete do potíží, dokud nezačnete jednat s new a free funkce.

    Pokud používáte new, budete muset zavolat delete ve vhodnou dobu. C ++ a rozšíření Arduino nemá žádné automatické sbírání odpadků, musíte si výslovně spravovat vlastní paměť.

    Komentáře

    • Dobře, pokud jsou instanční objekty (s novým) ‚ t shromážděné odpadky, to se musím naučit také ‚. Předpokládám, že to pokryje jakákoli kniha o C ++. Děkuji za dobrou odpověď!

    Odpověď

    — Aktualizace 170412
    Napsal jsem svůj originál odpověď před třemi lety z pohledu toho, že existuje zřetelné „Arduino C ++“. Jazyk použitý v IDE je standardní C ++, protože je implementován kompilátorem GNU C ++. „Zdánlivé“ rozdíly se vkrádají, protože IDE provede určité předběžné zpracování, které nováčkům v jazyce pomůže vyhnout se několika „gotcha“ vyplněním některých #includes, f / ex. Ale můžete – a já to dělám – napsat do něj správný C ++ a získat přesně to, co očekáváte.
    — ukončit aktualizaci

    Omezte používání funkcí jazyka C ++ na ty, jejichž implementaci provádíte vy plně rozumím. Existují některé funkce, které se kompilují do kódu náročnějšího na prostředky, než je zřejmé ze čtení zdrojového kódu. Volitelně vygenerovaný výpis .lss (sloučený zdroj a sestavení) vám může poskytnout dobrý přehled o tom, co udělal kompilátor C ++, když jste se nedívali.

    Na vaši otázku týkající se paměti: C ++ neshromažďuje odpadky. Jazyky založené na zásobníku, jako jsou C a C ++, přidělují dočasné úložiště v zásobníku pro automatické proměnné při vstupu do funkce, které se poté uvolní, když se funkce vrátí, ale to není pravda uvolňování paměti. Objekty vytvořené v haldě nebo v globální paměti žijí, dokud je výslovně neodstraníte. Ujistěte se, že víte, kde, kdy a jak dlouho budou různé druhy objektů vytvářeny. Opravdu nechcete, aby váš kód new -ing a delete -ing objekty byly chtivé. Budou postaveny v haldě paměti, fragmentovat to a způsobit, že z toho vyroste hromádka. To znamená, že váš kód – a vaše hezká helikoptéra – selžou.

    C pro vás udělá méně, takže bude moci méně vám vám. Není to špatná volba. C s několika funkcemi C ++ může být ještě lepší volbou, pokud uvážlivě vyberete další funkce. C ++, pokud jsou to vaše dvě možnosti:

    [Původní odpověď] – C ++ je standardizovaný jazyk Je široce nasazen v mnoha prostředích, včetně vestavěných systémů, a proto je důkladněji testován než velmi podobný jazyk C ++, kterým je „Arduino“. To je obzvláště důležité pro kritické / bezpečnostní kritické aplikace, jako plánujete. Havarovaný kód znamená havarovanou helikoptéru, ai když někomu neublíží, rozbije váš drahý stroj.

    • C ++ je standardní a je přenosný. Potřebujete upgradovat procesor? Všechno kromě kódu specifického pro křemík se přenese na nový. Potřebujete změnit sadu nástrojů, vývojový systém, hostitelský OS? C ++ bude podporováno všude. Ačkoli Arduino IDE poběží kdekoli, kde je podporována Java, je to jediný nástroj, který používá Arduino C ++ a je také velmi omezený l. Pokud chcete používat Eclipse, nástroje AVR, jít naboso na příkazovém řádku, vyvíjet se v Emacsu nebo v jakémkoli jiném prostředí, které dáváte přednost, bude podporován standardní C ++.

    • Arduino IDE dělá věci za vašimi zády – konkrétně obsahuje #h soubory, pokud si myslí, že je potřebujete. I když je to správné, opravdu chcete psát nebo alespoň vidět a rozumět všemu, co kompilátor uvidí. Programovací jazyky nejsou vyrobeny pro počítače (počítače snídají kousky k snídani); jsou vyrobeny pro lidi, konkrétně pro lidi, kteří vás sledují v rámci projektu, z nichž nejdůležitější mohou být … vy!, Když 6 měsíců poté pokud jste napsali modul, musíte se vrátit, abyste jej vylepšili, nebo spíše opravili. Opravdu chcete mít možnost vidět vše, co kompilátor vidí.

    Komentáře

    • Toto je SKUTEČNĚ dobrá odpověď . Zdá se jasné, že máte rádi C ++ a že bych také rád! … Ale vážně, ‚ ll skočím přímo do C ++, jakmile jsem ‚ pochopil, jak “ komunikace “ s různými senzory atd. funguje.
    • Znáte nějaké dobré knihy na toto téma? (Vhodné pro mě, kteří už roky programujeme v jiných jazycích a potřebuji pouze “ vloženou část “ jazyka C ++.)
    • Myslíte si, že zrychlený C ++ je na to dobrá kniha?
    • Přeji si, abych vám mohl pomoci s ‚ vpravo ‚ knihu, ale do C ++ jsem přišel se spoustou C za sebou a Kernighan & Ritchie ‚ s Programovací jazyk C je stále můj go-to book (špatná hračka) pro cokoli, co není výslovně C ++, a Ellis & Stroustrup ‚ s Anotovaná referenční příručka C ++ pro C ++. Ale při zápisu na hardware ‚ si uděláte dobře, když se podíváte na některé knihovny zařízení, které uživatelé přidali na Arduino.cc . Začněte vyladěním vstupně-výstupních portů pomocí funkcí pinMode (), digitalWrite () a digitalRead (), poté jejich analogických protějšků I / O a nakonec …
    • … plánujte psát přímo do I / O registry pro rychlost a vylepšení paměťového prostoru. Programy jako blinky.cpp a hello.cpp jsou dobrým místem k tomu, abyste si mohli začít hrát s hardwarem. Přidejte jednoduchý multimetr a několik LED diod se správnými odpory omezujícími proud trvale připájenými k jedné noze a měli byste vidět skutečné, i když jednoduché výsledky vašeho úsilí. Poté si přečtěte datové listy pro jakýkoli hardware, který vás zajímá, abyste se dozvěděli, jaké signály jim můžete číst / musíte je zapsat, aby byly přehrávány. Teplotní senzory se snadno používají a nepotřebuje ‚ každý záznamník lednice? Bavte se!

    Odpověď

    Jazyk Arduino je C ++, ale je velmi odlišné od většiny odrůd C ++.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *