C ++ versus de Arduino-taal?

Wat zijn de voordelen van elke taal bij het gebruik van de Arduino?

Ik denk dat dit een goede algemene vraag is, maar ik “Ik zal een beetje toevoegen waarom ik” vraag of iemand mij een fooi wil geven.

Ik heb ervaring met voorbewerkte talen zoals JavaScript, PHP, en heb met talen als Java en Visual Basic gerommeld. Met andere woorden, ik ken programmeertechnieken en zowel klassieke als prototypische objectoriëntatie, maar niets over directe communicatie met hardware.

Ik ben een octocopter aan het maken en denk dat een objectgeoriënteerde benadering de gemakkelijkste zal zijn. (De software zal heel veel functies hebben …) Ik heb echter nog nooit in C ++ geschreven.

Aangezien dit een Q is & Een site die wordt verondersteld om anderen te helpen, is alleen de algemene vraag die aan het begin wordt gesteld van groot belang, maar ik “zou eventuele opmerkingen over mijn situatie op prijs stellen.

Opmerkingen

  • Vermijd Arduino IDE aangezien het zijn IDE-naam niet verdient, het is zelfs een erg slechte editor: het is misschien goed voor beginners en eenvoudige schetsen, maar men moet snel naar iets beters gaan.
  • Dit is een vrij beknopte uitsplitsing van wat wordt bedoeld met (en wat ‘ eigenlijk onder de motorkap van) de ” Arduino-programmering Taal. ”
  • C++ vs. The Arduino Language? – De ” Arduino-taal ” is C ++. Er is een beetje voorverwerking om je te besparen bij het doen van functieprototypes, maar het is zeker C ++.
  • Er bestaat niet zoiets als Arduino-taal. Het is gewoon een bibliotheek.
  • Niet zozeer gerelateerd aan de vraag als aan de opmerkingen: Atmel studio is gratis en IMHO is het beter dan visuele studio voor arduino-programmering. Ondersteunt ook Visual Micro plugin, hoewel het helemaal niet nodig is voor het programmeren en debuggen van arduinos.

Answer

Mijn persoonlijke ervaring als hoogleraar (programmeren, mechatronica) is dat als je eerdere programmeerervaring hebt en je bekend bent met concepten als OOP, het beter is om voor C / C ++ te gaan. De arduino-taal is echt geweldig voor beginners, maar heeft enkele beperkingen (je moet bijvoorbeeld al je bestanden in dezelfde map hebben staan). En het is in feite een vereenvoudiging van C / C ++ (je kunt praktisch & en arduino-code naar een C / C ++ -bestand kopiëren, en het zal werken). Het is ook logisch dat u een volledig bekende IDE als eclipse kunt gebruiken:

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

In eerste instantie is wat meer installatie en configuratie van uw ontwikkelomgeving vereist, maar IMHO is het de moeite waard voor programmeurs met ervaring in een andere taal.

In elke In dat geval kan het geen kwaad om de arduino-taal en de arduino IDE een paar dagen te gaan gebruiken om vertrouwd te raken met de arduino-hardware en dan met Eclipse naar C / C ++ te gaan om je project echt te ontwikkelen.

Opmerkingen

  • Bedankt voor je mening. Ik ‘ zal de Arduino IDE gebruiken om te leren hoe je alle verschillende hardware bestuurt stukken zoals sensoren en LCD-schermen enz. Dan ga ik ‘ omhoog naar C ++ om de software voor de octocopter te maken. Kent u een goed en kort boek voor mensen die andere talen kennen? Het ” probleem ” met veel boeken die ik ‘ heb gevonden, bevatten zo veel dat ik ‘ niet nodig heb omdat ik ‘ m op een kleine Atmel-microcontroller in plaats van op een UI-computer.
  • Er is een leuk boek ” C Programmeren voor Arduino ” door Julien Bayle, wat handig is. Het is geen C ++ -taal, maar zou je moeten helpen de basis te begrijpen.
  • Dat is een goed verzoek: een kort en goed boek met de basisprincipes van C ++ voor programmeurs van andere talen. Sorry, ik kan geen aanbevelingen doen, ik ken geen goede. Ik heb zelfs een boek geschreven met een praktische focus (een videogame ontwikkelen) voor mijn studenten, maar het is alleen in het Spaans. Voor een goed en praktisch C ++ -boek zou ik Deitel & Deitel aanbevelen. Hoe C ++ te programmeren, zou je veel geavanceerde hoofdstukken kunnen overslaan.
  • C ++ ondersteunt OO-functies, C-taal niet.
  • @FriendofKim Niet precies wat ik bedoelde (hoewel je technisch gezien wel zou kunnen, is de Due snel genoeg om een softwareoplossing te ondersteunen voor niet-megabit seriële communicatie, en hij heeft 5 U (S) ARTS in totaal terwijl de Arduino-bibliotheken er maar 4 bieden, maar iirc het Due-bord biedt sowieso geen pinnen voor een van de USARTs); de Arduino-bibliotheken configureren de USARTs om de asynchrone modus te gebruiken, maar ik had een synchrone snelheid tot 6 Mbps nodig (en ik moest de SPI-modus gebruiken omdat de invoer moest worden behandeld als een onbewerkte bitstroom, dus geen stopbits / enz.), waarbij ook de standaard PIO-controllerconfiguratie werd gewijzigd.

Answer

In theorie …
Er is niet echt een Arduino-taal als zodanig. Het is eigenlijk gewoon C ++ met enkele domeinspecifieke bibliotheken. Deze voegen verschillende functies toe, zoals functies die u kunt oproepen om de hardware te bedienen. Als je die functies niet had, zou je direct met speciale registers moeten spelen om alles te besturen. Zo wordt ingebed programmeren gewoonlijk gedaan. Het is snel, maar het kan best moeilijk zijn om te leren en te begrijpen.

Naast de functies voegen de bibliotheken alternatieve namen toe voor sommige typen. boolean en byte bevinden zich bijvoorbeeld niet in de C ++ -standaard. Ze zijn echter direct equivalent aan bool en unsigned char.

Al deze dingen betekenen dat je waarschijnlijk algemeen kunt porten C ++ code rechtstreeks naar Arduino zonder problemen. Als je echter de andere kant op gaat, kan het zijn dat er wat kleine aanpassingen nodig zijn.

In de praktijk …
Dat gezegd hebbende, programmeren voor Arduino is niet precies hetzelfde als algemene C ++ -programmering. Veel van de verschillen zijn echter gemeenschappelijk voor alle embedded programmering (zoals beperkt geheugen en verwerkingskracht).

Het is ook vermeldenswaard dat als je de officiële Arduino IDE gebruikt, er allerlei vervelende eigenaardigheden en beperkingen zijn aan de manier waarop je je code instelt. Er zijn in alle gevallen tijdelijke oplossingen (voor zover ik weet), maar ze zijn soms behoorlijk frustrerend.

Gebruik voor volledige flexibiliteit een externe IDE (zoals Eclipse) met een plug-in om Arduino te ondersteunen. Dat zou je alle voordelen van C ++ moeten geven, samen met de Arduino-bibliotheken.

Opmerkingen

Answer

Wat zijn de voordelen van C ++ versus de Arduino-taal bij gebruik van Arduino? Ik heb ervaring met voorbewerkte talen zoals JavaScript, PHP, en heb gerommeld met talen als Java en Visual Basic.

Ten eerste accepteert de Arduino-compiler / IDE C en C ++ zoals ze zijn. In feite zijn veel van de bibliotheken geschreven in C ++. Veel van het onderliggende systeem is niet objectgeoriënteerd, maar dat zou het wel kunnen zijn.

Dus “De Arduino-taal” is C ++ of C.

C ++ is geen garbagecollection. Het beheert variabelen in het bereik – als je schrijft:

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

Dan zul je ontdekken die led en i niet groeien of lekken, ongeacht hoe vaak u blinkTimes.

Als i een klasse was, zou deze op dezelfde manier worden verwijderd zodra de functie is beëindigd. Dus zolang u new of soortgelijke geheugentoewijzingsfuncties om nieuwe objecten te maken, dan hoeft u zich geen zorgen te maken over lekken.

Mogelijk heeft u nog steeds onvoldoende geheugen als u enorme klassen en gebruik er veel van in diep geneste functies, maar in het algemeen kom je “niet in de problemen totdat je begint met new en free functies.

Als je new gebruikt, dan moet je “delete aanroepen op gepaste tijden. C ++, en bij uitbreiding Arduino, heeft geen automatische garbage collection, je moet expliciet je eigen geheugen beheren.

Comments

  • Oké, als geïnstantieerde objecten (with new) zijn ‘ t garbage collection, ik ‘ zal dat ook moeten leren. Ik veronderstel dat elk boek over C ++ dat zal behandelen. Bedankt voor een goed antwoord!

Antwoord

— Update 170412
Ik heb mijn origineel geschreven antwoord drie jaar geleden vanuit het perspectief dat er een duidelijke “Arduino C ++” bestaat. De taal die wordt gebruikt in de IDE is standaard C ++, omdat deze wordt geïmplementeerd door de GNU C ++ – compiler. “Schijnbare” verschillen sluipen binnen omdat de IDE wat voorbewerkingen zal doen om nieuwkomers in de taal te helpen een paar “gotcha” s te vermijden, door enkele #include, f / ex in te vullen. Maar u kunt – en dat doe ik – er correct C ++ naar schrijven en precies krijgen wat u verwacht te krijgen.
— update beëindigen

Beperk uw gebruik van C ++ -taalfuncties tot degenen wiens implementatie u volledig begrijpen. Er zijn enkele functies die compileren naar meer resource-intensieve code dan duidelijk is bij het lezen van de broncode. De optioneel gegenereerde .lss-lijst (samengevoegde broncode en assembly) kan u een goed inzicht geven in wat de C ++ – compiler deed toen u aan het kijken was.

Op uw vraag over geheugen: C ++ verzamelt geen garbage-collect. Stack-gebaseerde talen zoals C en C ++ wijzen tijdelijke opslag op de stapel toe voor automatische variabelen bij het invoeren van een functie, die vervolgens wordt vrijgegeven wanneer de functie terugkeert, maar dit is geen echte garbage-collection. Objecten die in heap- of globaal geheugen zijn gemaakt, leven totdat u ze expliciet verwijdert. Zorg ervoor dat u weet waar, wanneer en hoelang verschillende soorten objecten worden gemaakt. Je wilt echt niet zomaar je code new -ing en delete -ing objecten. Ze zullen in een hoop geheugen worden ingebouwd, het fragmenteren en ervoor zorgen dat het opgroeit in de stapel. Dat is wanneer je code – en je mooie “helikopter – crasht.

C doet minder voor je, dus het kan minder doen naar jou. Het is geen slechte keuze. C met een paar van de functies van C ++ kan een nog betere keuze zijn, aangezien u de extra functies oordeelkundig kiest. C ++, als dat uw twee keuzes zijn:

[Oorspronkelijk antwoord] – C ++ is een gestandaardiseerde taal Het wordt op grote schaal gebruikt in veel omgevingen, inclusief embedded systemen, en is daarom grondiger getest dan de zeer gelijkende C ++ -taal die “Arduino” is. Dit is vooral belangrijk voor bedrijfskritische / veiligheidskritische toepassingen zoals u van plan bent. Gecrashte code betekent een gecrashte “helikopter” en zelfs als het niemand “pijn doet, zal uw dure machine kapot maken.

  • Omdat C ++ standaard is, is het draagbaar. Moet u uw processor upgraden? Alles behalve siliciumspecifieke code wordt overgezet naar de nieuwe. Moet u uw toolset, ontwikkelsysteem en host-besturingssysteem wijzigen? C ++ wordt overal ondersteund. Hoewel Arduino IDE overal kan worden uitgevoerd waar Java wordt ondersteund, is het de enige tool die Arduino C ++ gebruikt en het is ook een zeer beperkte l. Als u Eclipse, de AVR-tools, wilt gebruiken, blootsvoets op de opdrachtregel wilt gaan, kunt ontwikkelen binnen Emacs of welke andere omgeving dan ook, wordt standaard C ++ ondersteund.

  • De Arduino IDE doet dingen achter je rug – met name # bevat .h-bestanden wanneer hij denkt dat je ze nodig hebt. Zelfs als het correct is, wil je echt alles schrijven, of in ieder geval zien en begrijpen, alles wat de compiler gaat zien. Programmeertalen zijn niet gemaakt voor computers (computers eten stukjes als ontbijt); ze zijn gemaakt voor mensen, met name de mensen die je volgen bij het project, van wie de belangrijkste misschien … jij! je hebt een module geschreven, je moet terugkomen om het te verbeteren, of waarschijnlijker, om het te repareren. Je wilt echt alles kunnen zien wat de compiler ziet.

Reacties

  • Dit is ECHT een goed antwoord . Het lijkt duidelijk dat je C ++ leuk vindt en dat ik het ook leuk zou vinden! … Maar serieus, ik ‘ spring direct naar C ++ zodra ik ‘ heb begrepen hoe de ” communicatie ” met de verschillende sensoren etc. werken.
  • Kent u goede boeken over dit onderwerp? (Geschikt voor mij die al jaren programmeren in andere talen, en alleen het ” ingesloten deel ” van C ++ nodig hebben.)
  • Denk je dat Accelerated C ++ hier een goed boek voor is?
  • Ik wou dat ik je kon helpen met de ‘ right ‘ boek, maar ik kwam bij C ++ met een heleboel C achter me en Kernighan & Ritchie ‘ s De C-programmeertaal is nog steeds mijn go-to-book (slechte woordspeling) voor alles wat niet expliciet C ++ is, en Ellis & Stroustrup ‘ s De geannoteerde C ++ Reference Manual voor C ++. Maar voor het schrijven naar hardware, ‘ doet u er goed aan om enkele van de apparaatbibliotheken te bekijken die door gebruikers zijn bijgedragen op Arduino.cc . Begin met het tweaken van I / O-poorten met pinMode (), digitalWrite () en digitalRead () functies, dan hun analoge I / O-tegenhangers, en uiteindelijk, …
  • … plan om rechtstreeks naar I / O-registers voor verbeteringen in snelheid en geheugenruimte. Programmas zoals blinky.cpp en hello.cpp zijn goede plekken om met hardware te gaan rommelen. Voeg een eenvoudige multimeter toe en een paar LEDs met de juiste stroombegrenzende weerstanden die permanent aan één poot zijn gesoldeerd en u zou echte, zij het eenvoudige, resultaten van uw inspanningen moeten kunnen zien. Lees daarna de datasheets voor alle hardware die u interesseert om erachter te komen welke signalen u kunt lezen / schrijven om ze te laten spelen. Temperatuursensoren zijn gemakkelijk te gebruiken en ‘ Heeft niet iedereen een koelkastlogger nodig? Veel plezier!

Answer

De Arduino-taal is C ++, maar het is heel anders dan de meeste C ++ -variëteiten.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *