Hva er fordelene med hvert språk når du bruker Arduino?
Jeg synes dette er et godt generelt spørsmål, men jeg «Jeg vil legge til litt om hvorfor jeg spør om noen vil gi meg et tips.
Jeg har erfaring med forhåndsbehandlede språk som JavaScript, PHP, og har flidd med språk som Java og Visual Basic. Med andre ord kjenner jeg programmeringsteknikker og både klassisk og prototypisk objektorientering, men ingenting om å kommunisere direkte med maskinvare.
Jeg lager et oktokopter, og tenker at en objektorientert tilnærming vil være den enkleste. (Programvaren vil ha veldig mange funksjoner …) Imidlertid har jeg aldri skrevet i C ++.
Siden dette er en Q & Et nettsted som antas For å hjelpe andre er det bare det generelle spørsmålet som ble presentert i begynnelsen som er av stor betydning, men jeg setter pris på eventuelle kommentarer til situasjonen min.
Kommentarer
Svar
Min personlige erfaring som professor (programmering, mekatronikk) er at hvis du har tidligere programmeringserfaring og du er klar over begreper som OOP, er det bedre å gå for C / C ++. Arduino-språket er veldig bra for nybegynnere, men har noen begrensninger (for eksempel må du ha alle filene dine i samme mappe). Og det er i utgangspunktet en forenkling av C / C ++ (du kan praktisk talt kopiere & lim inn arduino-koden til en C / C ++ -fil, så fungerer den). Det er også fornuftig at du kan gå og bruke en fullstendig kjent IDE som formørkelse:
http://playground.arduino.cc/Code/Eclipse
Opprinnelig kreves det litt mer av oppsett og konfigurering av ditt dev-miljø, men IMHO er det verdt det for programmerere med erfaring på hvilket som helst annet språk.
I alle tilfelle, vil det ikke skade deg å begynne å bruke arduino-språket og arduino IDE i noen dager for å bli kjent med arduino-maskinvaren og deretter flytte til C / C ++ med Eclipse for å virkelig utvikle prosjektet.
Kommentarer
- Takk for tankene dine. Jeg ‘ Jeg bruker Arduino IDE for å lære hvordan du styrer alle de forskjellige maskinvarene stykker som sensorer og LCD-skjermer osv. Så vil jeg ‘ flytte opp til C ++ for å lage programvaren til octocopteret. Kjenner du en god og kort bok for folk som kan andre språk? » problemet » med mange bøker jeg ‘ har funnet er at de inneholder så mye at jeg ikke trenger ‘ fordi jeg ‘ m på en liten Atmel-mikrokontroller i stedet for en brukergrensesnitt-datamaskin.
- Det er en fin bok » C Programmering for Arduino » av Julien Bayle som er nyttig. Det er ikke C ++ – språk, men skal hjelpe deg med å forstå grunnlaget.
- Det er en god forespørsel: en kort og god bok med det grunnleggende om C ++ for programmerere av andre språk. Beklager at jeg ikke kan gi noen anbefalinger, jeg er ikke klar over noen gode. Jeg skrev faktisk en bok med praktisk fokus (utvikle et videospill) for studentene mine, men det er bare på spansk. For en god og praktisk C ++ – bok vil jeg anbefale Deitel & Deitel Slik programmerer du C ++, du kan hoppe over mange avanserte kapitler.
- C ++ støtter OO-funksjoner, C-språk ikke.
- @FriendofKim Ikke akkurat hva jeg mente (selv om du teknisk sett kunne det, er Due rask nok til å støtte en programvareløsning for ikke-megabit seriell kommunikasjon, og den har 5 U (S) ARTS totalt mens Arduino-bibliotekene bare gir 4 av dem, men iirc the Due-kortet gir uansett ikke pins til en av USART-ene); Arduino-bibliotekene konfigurerer USARTs til å bruke asynkron modus, men jeg trengte synkron på opptil 6 Mbps (og jeg måtte bruke SPI-modus da inngangen måtte behandles som en rå bitstrøm, så ingen stoppbiter / osv.), som også involverte endring av standard PIO-kontrollerkonfigurasjon.
Svar
I teorien …
Det er egentlig ikke et Arduino-språk som sådan. Det er egentlig bare C ++ med noen domenespesifikke biblioteker. Disse legger til forskjellige funksjoner, for eksempel funksjoner du kan ringe for å kontrollere maskinvaren. Hvis du ikke hadde disse funksjonene, trenger du å fikle direkte med spesielle registre for å kontrollere alt. Slik gjøres innebygd programmering vanligvis. Det er raskt, men det kan være ganske vanskelig å lære og forstå.
I tillegg til funksjonene, legger bibliotekene til alternative navn for noen typer. For eksempel er boolean
og byte
ikke i C ++ -standarden. Imidlertid tilsvarer de direkte bool
og unsigned char
.
Alle disse tingene betyr at du sannsynligvis kan portere generelt C ++ – kode direkte til Arduino uten problemer. Å gå tilbake den andre veien kan imidlertid kreve litt mindre redigering.
I praksis …
Når det er sagt, er ikke programmering for Arduino nøyaktig det samme som generell C ++ programmering. Mye av forskjellene er imidlertid felles for all innebygd programmering (for eksempel begrenset minne og prosessorkraft).
Det er også verdt å merke seg at hvis du bruker den offisielle Arduino IDE, så er det alle slags irriterende quirks og begrensninger for hvordan du konfigurerer koden din. Det er løsninger i alle tilfeller (så vidt jeg vet), men de er noen ganger ganske frustrerende.
For full fleksibilitet, bruk en tredjeparts IDE (som Eclipse) med en plugin-modul for å støtte Arduino. Det burde gi deg alle fordelene med C ++, sammen med Arduino-bibliotekene.
Kommentarer
- Her ‘ s mitt oppsett for Eclipse, som fungerer bra med Arduino. arduino.stackexchange.com/a/75491/7727 . Jeg bruker ikke ‘ noen Arduino-plugins, bare ren formørkelse for C / C ++.
Svar
Hva er fordelene med C ++ kontra Arduino-språket når du bruker Arduino? Jeg har erfaring med forhåndsbehandlede språk som JavaScript, PHP og har flidd med språk som Java og Visual Basic.
Først godtar Arduino-kompilatoren / IDE C og C ++ som de er. Faktisk er mange av bibliotekene skrevet i C ++. Mye av det underliggende systemet er ikke objektorientert, men det kan være.
Dermed er «Arduino-språket» C ++ eller C.
C ++ samles ikke søppel. Den håndterer variabler i omfang – 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å finner du at led
og i
ikke vokser eller lekker, uansett hvor mange ganger du ringer blinkTimes
.
Hvis i
var en klasse, ville den på samme måte kastes når funksjonen ble avsluttet. Så lenge du ikke bruker new
eller lignende minnetildelingsfunksjoner for å opprette nye objekter, så trenger du ikke å bekymre deg for lekkasjer.
Du kan fremdeles gå tom for minne hvis du lager store klasser og bruker mange av dem i dypt nestede funksjoner, men generelt vil du ikke komme i trøbbel før du begynner å håndtere new
og free
-funksjoner.
Hvis du bruker new
, må du ringe delete
til passende tidspunkter. C ++, og i forlengelse av Arduino, har ingen automatisk søppelinnsamling, du må eksplisitt administrere ditt eget minne.
Kommentarer
- Ok, hvis instantierte objekter (med nye) er ikke ‘ t søppel som er samlet, må jeg ‘ lære det også. Jeg antar at enhver bok om C ++ vil dekke det. Takk for et godt svar!
Svar
— Oppdater 170412
Jeg skrev originalen min svar for tre år siden fra perspektivet til at det eksisterer en distinkt «Arduino C ++». Språket som brukes i IDE er standard C ++, fordi det er implementert av GNU C ++ kompilatoren. «Tilsynelatende» forskjeller sniker seg inn fordi IDE vil gjøre noe forbehandling for å hjelpe nykommere til språket å unngå et par «gotcha», ved å fylle ut noen #includes, f / ex. Men du kan – og det gjør jeg – skrive riktig C ++ til det og få akkurat det du forventer å få.
— sluttoppdatering
Begrens bruken av C ++ språkfunksjoner til de som har implementering du full forståelse. Det er noen funksjoner som kompileres til mer ressurskrevende kode enn det som er åpenbart fra å lese kildekoden. Den valgfritt genererte .lss (sammenslått kilde og montering) -liste kan gi deg god innsikt i hva C ++ – kompilatoren gjorde da du ikke så.
På spørsmålet ditt om minne: C ++ samler ikke søppel. Stakkbaserte språk som C og C ++ tildeler midlertidig lagring på stakken for automatiske variabler ved funksjonsoppføring, som deretter blir utgitt når funksjonen kommer tilbake, men dette er ikke sant søppelinnsamling. Objekter opprettet i heap- eller globalt minne lever til du eksplisitt sletter dem. Sørg for at du vet hvor, når og hvor lenge forskjellige typer objekter blir opprettet. Du vil virkelig ikke ha koden din new
-ing og delete
-ing objekter med vilje. De vil bli bygget i heapminne, fragmentere den og få den til å vokse opp i bunken. Det er når koden din – og den fine «kopimaskinen din – krasjer.
C gjør mindre for deg slik at den kan gjøre mindre til deg. Det er ikke et dårlig valg. C med noen få av C ++ s funksjoner kan være et enda bedre valg, gitt at du velger ekstrafunksjonene med omhu. C ++, hvis det er dine to valg:
[Originalsvar] – C ++ er et standardisert språk .Det er mye distribuert i mange miljøer, inkludert innebygde systemer, og er derfor grundigere testet enn det veldig like C ++ språket som er «Arduino». Dette er spesielt viktig for oppdragskritiske / sikkerhetskritiske applikasjoner som du planlegger. Knust kode betyr en «kopter» som krasjet, og selv om den ikke skader noen, vil den ødelegge den dyre maskinen din.
-
Som standard er C ++ bærbar. Trenger du å oppgradere prosessoren din? Alt bortsett fra silisium-spesifikk kode, blir porten til den nye. Trenger du å endre verktøysett, utviklingssystem, verts-OS? C ++ vil støttes overalt. Selv om Arduino IDE vil kjøre hvor som helst Java støttes, er det det eneste verktøyet som bruker Arduino C ++, og det er også veldig begrenset l. Hvis du vil bruke Eclipse, AVR-verktøyene, gå barbeint på kommandolinjen, utvikle deg i Emacs, eller hva som helst annet miljø du foretrekker, vil standard C ++ støttes.
-
Arduino IDE gjør ting bak ryggen din – spesielt inkluderer den #h-filer når den tror du trenger dem. Selv om det er riktig, vil du virkelig skrive eller i det minste se og forstå alt kompilatoren kommer til å se. Programmeringsspråk er ikke laget for datamaskiner (datamaskiner spiser biter til frokost); de er laget for mennesker, spesielt de som følger deg på prosjektet, og den viktigste av dem kan være … deg !, når 6 måneder etter du skrev en modul, må du komme tilbake for å forbedre den, eller mer sannsynlig, fikse den. Du vil virkelig kunne se alt kompilatoren ser.
Kommentarer
- Dette er et virkelig godt svar . Det virker klart at du liker C ++ og at jeg også skal like det! … Men seriøst, jeg ‘ Jeg hopper rett inn på C ++ så snart jeg ‘ har forstått hvordan » kommunikasjon » med de forskjellige sensorene osv. fungerer.
- Kjenner du noen gode bøker om emnet? (Passer for meg som har programmert i mange år på andre språk, og som bare trenger » innebygd del » av C ++.)
- Synes du Accelerated C ++ er en god bok for dette?
- Jeg skulle ønske jeg kunne hjelpe deg med ‘ høyre ‘ bok, men jeg kom til C ++ med en hel masse C bak meg og Kernighan & Ritchie ‘ s C Programming Language er fremdeles min go-to-bok (dårlig ordspill) for alt som ikke er eksplisitt C ++, og Ellis & Stroustrup ‘ s Annotated C ++ Reference Manual for C ++. Men for å skrive til maskinvare, vil du ‘ gjøre det bra å se på noen av enhetsbibliotekene som er bidratt av brukere på Arduino.cc . Begynn å tilpasse I / O-porter med pinMode (), digitalWrite () og digitalRead () -funksjoner, deretter deres analoge i / o-kolleger, og til slutt, …
- … planlegger å skrive direkte til I / O registrerer for forbedringer av hastighet og minne. Programmer som blinky.cpp og hello.cpp er gode steder å begynne å rote med maskinvare. Legg til et enkelt multimeter og noen få lysdioder med de riktige strømbegrensende motstandene som er loddet permanent til det ene benet, og du bør kunne se reelle, hvis enkle, resultater fra din innsats. Etter det, les datablad for maskinvare som interesserer deg for å lære hvilke signaler du kan lese / må skrive til dem for å få dem til å spille. Temperatursensorer er enkle å bruke og trenger ikke ‘ en kjøleskapslogger? Ha det gøy!
Svar
Arduino-språket er C ++, men det er veldig forskjellig fra de fleste C ++ varianter.
C++ vs. The Arduino Language?
– » Arduino Language » er C ++. Det er litt forbehandling for å spare deg for å gjøre funksjonsprototyper, men det er absolutt C ++.