C ++ vs. Arduino-sproget?

Hvad er fordelene ved hvert sprog, når du bruger Arduino?

Jeg synes, det er et godt generelt spørgsmål, men jeg “Jeg tilføjer lidt om, hvorfor jeg spørger, om nogen vil give mig et tip.

Jeg har erfaring med forbehandlede sprog som JavaScript, PHP og har fiket med sprog som Java og Visual Basic. Med andre ord kender jeg programmeringsteknikker og både klassisk og prototypisk objektorientering, men intet om at kommunikere direkte med hardware.

Jeg laver en octocopter og tænker at en objektorienteret tilgang vil være den nemmeste. (Softwaren vil have meget mange funktioner …) Jeg har dog aldrig skrevet i C ++.

Da dette er et Q & Et websted, der antages for at hjælpe andre er kun det generelle spørgsmål, der blev præsenteret i starten, meget vigtigt, men jeg sætter pris på eventuelle kommentarer til min situation.

Kommentarer

  • Undgå Arduino IDE, da det ikke fortjener sit IDE-navn, det er endda en meget dårlig editor: det kan være godt for begyndere og enkle skitser, men man skal hurtigt gå til noget bedre.
  • Dette er en ret kort opsplitning af, hvad der menes med (og hvad ‘ s faktisk under emhætten på) ” Arduino-programmering Sprog. ”
  • C++ vs. The Arduino Language? – ” Arduino-sprog ” er C ++. Der er en smule forbehandling, der sparer dig for at udføre funktionsprototyper, men det er helt sikkert C ++.
  • Der er ikke sådan noget som arduino-sprog. Det er simpelthen et bibliotek.
  • Ikke så relateret til spørgsmålet om kommentarerne: Atmel-studiet er gratis, og IMHO er bedre end det visuelle studie til arduino-programmering. Understøtter også Visual Micro-plugin, selvom det slet ikke er nødvendigt for programmering og fejlfinding af arduinos.

Svar

Min personlige erfaring som professor (programmering, mekatronik) er, at hvis du har tidligere programmeringserfaring, og du er opmærksom på begreber som OOP, er det bedre at gå efter C / C ++. Arduino-sproget er virkelig godt for begyndere, men har nogle begrænsninger (f.eks. Skal du have alle dine filer i samme mappe). Og det er grundlæggende en forenkling af C / C ++ (du kan praktisk talt kopiere & indsæt arduino-kode til en C / C ++ -fil, så fungerer den). Det giver også mening, at du kan gå og bruge en fuldt kendt IDE som formørkelse:

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

Oprindeligt kræves der lidt mere opsætning og konfiguration af dit dev-miljø, men IMHO er det værd for programmører med erfaring på ethvert andet sprog.

I enhver tilfælde vil det ikke skade dig at begynde at bruge arduino-sproget og arduino IDE i et par dage for at blive fortrolig med arduino-hardware og derefter flytte til C / C ++ med Eclipse for virkelig at udvikle dit projekt.

Kommentarer

  • Tak for dine tanker. Jeg ‘ Jeg bruger Arduino IDE til at lære at styre al den forskellige hardware stykker som sensorer og LCD-skærme osv. Derefter flytter jeg ‘ til C ++ for at fremstille softwaren til octocopteren. Kender du en god og kort bog til folk, der kender andre sprog? ” problemet ” med mange bøger, jeg ‘ har fundet, er at de indeholder så meget, at jeg ikke ‘ behøver, fordi jeg ‘ m på en lille Atmel-mikrokontroller snarere end en UI-computer.
  • Der er en dejlig bog ” C Programmering til Arduino ” af Julien Bayle, hvilket er nyttigt. Det er C ikke C ++ sprog, men skal hjælpe dig med at forstå grundlaget.
  • Det er en god anmodning: en kort og god bog med det grundlæggende i C ++ til programmører af andre sprog. Beklager, jeg kan ikke give nogen anbefalinger, jeg er ikke opmærksom på noget godt. Faktisk skrev jeg en bog med et praktisk fokus (udvikle et videospil) til mine studerende, men det er kun på spansk. For en god og praktisk C ++ – bog vil jeg anbefale Deitel & Deitel Sådan programmeres C ++, du kan springe mange avancerede kapitler over.
  • C ++ understøtter OO-funktioner, C-sprog ikke.
  • @FriendofKim Ikke ligefrem hvad jeg mente (selvom du teknisk set kunne det, er Due hurtig nok til at understøtte en softwareløsning til ikke-megabit seriel kommunikation, og den har 5 U (S) ARTS i alt, mens Arduino-bibliotekerne kun leverer 4 af dem, men iirc giver Due-kortet alligevel ikke stifter til en af USARTerne); Arduino-bibliotekerne konfigurerer USARTerne til at bruge asynkron tilstand, men jeg havde brug for synkron på op til 6 Mbps (og jeg var nødt til at bruge SPI-tilstand, da input skulle behandles som en rå bitstrøm, så ingen stopbit / osv.), som også involverede ændring af standard PIO-controller-konfiguration.

Svar

I teorien …
Der er ikke rigtig et Arduino-sprog som sådan. Det er egentlig bare C ++ med nogle domænespecifikke biblioteker. Disse tilføjer forskellige funktioner, såsom funktioner, du kan ringe til for at kontrollere hardware. Hvis du ikke havde disse funktioner, skulle du snakke direkte med specielle registre for at kontrollere alt. Sådan foregår indlejret programmering normalt. Det er hurtigt, men det kan være ret svært at lære og forstå.

Ud over funktionerne tilføjer bibliotekerne alternative navne til nogle typer. For eksempel er boolean og byte ikke i C ++ -standarden. De svarer dog direkte til bool og unsigned char.

Alle disse ting betyder, at du sandsynligvis kan port generelt C ++ – kode direkte til Arduino uden problemer. At gå tilbage den anden vej kan dog kræve mindre redigering.

I praksis …
Når det er sagt, er programmering til Arduino ikke nøjagtigt den samme som generel C ++ programmering. Mange forskelle er dog fælles for al indlejret programmering (såsom begrænset hukommelse og processorkraft).

Det er også værd at bemærke, at hvis du bruger den officielle Arduino IDE, så er der alle mulige irriterende quirks og begrænsninger for, hvordan du konfigurerer din kode. Der er løsninger i alle tilfælde (så vidt jeg ikke ved), men de er undertiden ret frustrerende.

For at få fuld fleksibilitet skal du bruge en tredjeparts IDE (såsom Eclipse) med et plug-in til at understøtte Arduino. Det skal give dig alle fordelene ved C ++ sammen med Arduino-bibliotekerne.

Kommentarer

Svar

Hvad er fordelene ved C ++ i forhold til Arduino-sproget, når du bruger Arduino? Jeg har erfaring med forbehandlede sprog som JavaScript, PHP og har fiklet med sprog som Java og Visual Basic.

Først accepterer Arduino-kompilatoren / IDE C og C ++ som de er. Faktisk er mange af bibliotekerne skrevet i C ++. Meget af det underliggende system er ikke objektorienteret, men det kunne være.

Således er “arduino-sproget” C ++ eller C.

C ++ indsamles ikke skrald. Det håndterer variabler i omfanget – hvis du skriver:

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

Så finder du at led og i ikke vokser eller lækker, uanset hvor mange gange du ringer til blinkTimes.

Hvis i var en klasse, ville det på samme måde bortskaffes, når funktionen var afsluttet. Så længe du ikke bruger new eller lignende hukommelsesallokeringsfunktioner for at oprette nye objekter, så behøver du ikke bekymre dig om lækager.

Du kan muligvis stadig løbe tør for hukommelse, hvis du opretter store klasser og bruger mange af dem i dybt indlejrede funktioner, men generelt vil du ikke løbe ind i problemer, indtil du begynder at beskæftige dig med new og free funktioner.

Hvis du bruger new, skal du ringe til delete på passende tidspunkter. C ++, og i forlængelse heraf Arduino, har ingen automatisk affaldssamling, du skal eksplicit styre din egen hukommelse.

Kommentarer

  • Okay, hvis instantierede objekter (med nyt) er ikke ‘ t skrald indsamlet, jeg ‘ skal også lære det. Jeg formoder, at enhver bog om C ++ vil dække det. Tak for et godt svar!

Svar

— Opdater 170412
Jeg skrev min original svar for tre år siden fra perspektivet, at der eksisterede en særskilt “Arduino C ++”. Sprog, der bruges i IDE er standard C ++, fordi det er implementeret af GNU C ++ – kompilatoren. “Tilsyneladende” forskelle kryber ind, fordi IDE vil gøre noget forbehandling for at hjælpe nyankomne til sproget med at undgå et par “gotcha”, ved at udfylde nogle #includes, f / ex. Men du kan – og det gør jeg – skrive korrekt C ++ til det og få lige hvad du forventer at få.
— slutopdatering

Begræns din brug af C ++ sprogfunktioner til dem, hvis implementering du forstå fuldt ud. Der er nogle funktioner, der kompileres til mere ressourceintensiv kode, end det er indlysende ved læsning af kildekoden. Den valgfrit genererede .lss (flettet kilde og samling) -liste kan give dig et godt indblik i, hvad C ++ – kompilatoren gjorde, da du ikke kiggede.

Til dit spørgsmål om hukommelse: C ++ indsamler ikke affald. Stakbaserede sprog som C og C ++ tildeler midlertidig lagring på stakken til automatiske variabler ved funktionsindtastning, som derefter frigives, når funktionen vender tilbage, men dette er ikke sand affaldssamling. Objekter oprettet i heap- eller global hukommelse lever, indtil du eksplicit sletter dem. Sørg for at vide, hvor, hvornår og hvor længe forskellige slags objekter oprettes. Du vil virkelig ikke have din kode new -ing og delete -ing objekter vil-nilly. De vil blive bygget i bunkehukommelse, fragmentere det og få det til at vokse op i stakken. Det er, når din kode – og din pæne “copter – går ned.

C gør mindre for dig, så det kan gøre mindre til dig. Det er ikke et dårligt valg. C med et par af C ++ s funktioner kan være et endnu bedre valg, forudsat at du vælger de ekstra funktioner med omhu. C ++, hvis det er dine to valg:

[Originalt svar] – C ++ er et standardiseret sprog Det er bredt anvendt i mange miljøer, herunder indlejrede systemer, og testes derfor mere grundigt end det meget lignende C ++ sprog, der er “Arduino”. Dette er især vigtigt for missionskritiske / sikkerhedskritiske applikationer, som du planlægger. Nedbrudt kode betyder en nedbrudt “copter, og selvom den ikke skader nogen, vil den bryde din dyre maskine.

  • Som standard er C ++ bærbar. Har du brug for at opgradere din processor? Alt undtagen silicium-specifik kode porteres til den nye. Har du brug for at ændre dit værktøjssæt, udviklingssystem, værts-OS? C ++ vil blive understøttet overalt. Selvom Arduino IDE kører hvor som helst Java understøttes, er det det eneste værktøj, der bruger Arduino C ++, og det er også meget begrænset l. Hvis du vil bruge Eclipse, AVR-værktøjerne, gå barfodet på kommandolinjen, udvikle dig inden for Emacs eller ethvert andet miljø, du foretrækker, understøttes standard C ++.

  • Arduino IDE gør ting bag din ryg – specifikt #includes .h-filer, når den mener, du har brug for dem. Selvom det er korrekt, vil du virkelig skrive eller i det mindste se og forstå alt, hvad compileren vil se. Programmeringssprog er ikke lavet til computere (computere spiser bits til morgenmad); de er lavet til mennesker, specifikt de mennesker, der følger dig på projektet, hvoraf den vigtigste kan være … dig !, når 6 måneder efter du skrev et modul, skal du komme tilbage for at forbedre det, eller mere sandsynligt rette det. Du vil virkelig kunne se alt, hvad kompilatoren ser.

Kommentarer

  • Dette er et rigtig godt svar . Det ser ud til, at du kan lide C ++, og at jeg også vil kunne lide det! … Men seriøst springer jeg ‘ til højre på C ++ så snart jeg ‘ har forstået, hvordan ” kommunikation ” med de forskellige sensorer osv. fungerer.
  • Kender du nogen gode bøger om emnet? (Velegnet til mig, der har programmeret i årevis på andre sprog og kun har brug for den ” indlejrede del ” i C ++.)
  • Synes du Accelereret C ++ er en god bog til dette?
  • Jeg ville ønske, jeg kunne hjælpe dig med ‘ højre ‘ bog, men jeg kom til C ++ med en hel masse C bag mig og Kernighan & Ritchie ‘ s C-programmeringssprog er stadig min go-to-bog (dårlig ordspil) for noget, der ikke udtrykkeligt er C ++, og Ellis & Stroustrup ‘ s Den kommenterede C ++ referencehåndbog til C ++. Men for at skrive til hardware, vil du ‘ gøre det godt at se på nogle af enhedsbibliotekerne, der er bidraget af brugere på Arduino.cc . Start med at tilpasse I / O-porte med pinMode (), digitalWrite () og digitalRead () -funktioner, så deres analoge i / o-modstykker, og til sidst …
  • … planlægger at skrive direkte til I / O registrerer hastigheds- og hukommelsespladsforbedringer. Programmer som blinky.cpp og hello.cpp er gode steder at begynde at rode med hardware. Tilføj et simpelt multimeter og et par lysdioder med de rigtige strømbegrænsende modstande, der er loddet permanent til det ene ben, og du skal kunne se reelle, hvis enkle, resultater fra din indsats. Efter det skal du læse datablade for enhver hardware, der interesserer dig for at lære, hvilke signaler du kan læse / skal skrive til dem for at få dem til at spille. Temperatursensorer er nemme at bruge og har ‘ ikke alle brug for en køleskabslogger? Hav det sjovt!

Svar

Arduino-sproget er C ++, men det er meget forskellig fra de fleste C ++ – sorter.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *