C ++ mot Arduino-språket? (Svenska)

Vilka är fördelarna med varje språk när man använder Arduino?

Jag tycker att det här är en bra allmän fråga, men jag ”Jag lägger till lite om varför jag frågar om någon vill ge mig ett tips.

Jag har erfarenhet av förbehandlade språk som JavaScript, PHP och har lurat med språk som Java och Visual Basic. Med andra ord vet jag programmeringstekniker och både klassisk och prototypal objektorientering, men ingenting om att kommunicera direkt med hårdvara.

Jag gör en octocopter och tänker att ett objektorienterat tillvägagångssätt kommer att vara det enklaste. (Programvaran kommer att ha väldigt många funktioner …) Men jag har aldrig skrivit i C ++.

Eftersom detta är en Q & En webbplats som antas för att hjälpa andra är det bara den allmänna frågan som presenteras i början som är mycket viktig, men jag skulle uppskatta alla kommentarer om min situation.

Kommentarer

  • Undvik Arduino IDE eftersom det inte förtjänar sitt IDE-namn, det är till och med en mycket dålig redaktör: det kan vara bra för nybörjare och enkla skisser men man bör snabbt gå till något bättre.
  • Detta är en ganska kortfattad uppdelning av vad som menas med (och vad ’ s faktiskt under huven på) ” Arduino-programmering Språk. ”
  • C++ vs. The Arduino Language? – ” Arduino-språk ” är C ++. Det finns lite förbehandling för att spara dig med funktionsprototyper, men det är definitivt C ++.
  • Det finns inget sådant som arduino-språk. Det är helt enkelt ett bibliotek.
  • Inte så relaterat till frågan om kommentarerna: Atmel studio är gratis och IMHO det är bättre än visuell studio för arduino-programmering. Stöder också Visual Micro-plugin, även om det inte alls är nödvändigt för programmering och felsökning av arduinos.

Svar

Min personliga erfarenhet som professor (programmering, mekatronik) är att om du har tidigare programmeringserfarenhet och du är medveten om begrepp som OOP, är det bättre att gå till C / C ++. Arduino-språket är riktigt bra för nybörjare, men har vissa begränsningar (t.ex. måste du ha alla dina filer i samma mapp). Och det är i grunden en förenkling av C / C ++ (du kan praktiskt taget kopiera & klistra in arduino-kod till en C / C ++ -fil så fungerar det). Det är också vettigt att du kan gå och använda en fullständigt känd IDE som förmörkelse:

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

Initialt krävs det lite mer av installation och konfiguration av din dev-miljö, men IMHO är det värt det för programmerare med erfarenhet av något annat språk.

I alla fall kommer det inte att skada dig att börja använda arduino-språket och arduino IDE i några dagar för att bekanta dig med arduino-hårdvaran och sedan flytta till C / C ++ med Eclipse för att verkligen utveckla ditt projekt.

Kommentarer

  • Tack för dina tankar. Jag ’ Jag använder Arduino IDE för att lära dig hur man styr alla olika hårdvaror bitar som sensorer och LCD-skärmar etc. Då ska jag ’ flytta upp till C ++ för att göra programvaran för octocopteren. Känner du till en bra och kort bok för människor som kan andra språk? ” problemet ” med många böcker jag ’ har hittat är att de innehåller så mycket att jag inte behöver ’ eftersom jag ’ m på en liten Atmel-mikrokontroller snarare än en UI-dator.
  • Det finns en fin bok ” C-programmering för Arduino ” av Julien Bayle vilket är användbart. Det är C inte C ++ – språk men bör hjälpa dig att förstå grunden.
  • Det är en bra begäran: en kort och bra bok med grunderna i C ++ för programmerare av andra språk. Tyvärr kan jag inte ge några rekommendationer, jag känner inte till något bra. Jag skrev faktiskt en bok med praktiskt fokus (utveckla ett videospel) för mina studenter, men det är bara på spanska. För en bra och praktisk C ++ – bok skulle jag rekommendera Deitel & Deitel Hur man programmerar C ++, du kan hoppa över många avancerade kapitel.
  • C ++ stöder OO-funktioner, C-språk gör det inte.
  • @FriendofKim Inte precis vad jag menade (även om du tekniskt sett skulle kunna, är Due tillräckligt snabb för att stödja en mjukvarulösning för icke-megabit seriell kommunikation, och den har 5 U (S) ARTS totalt medan Arduino-biblioteken bara tillhandahåller 4 av dem men iirc the Due-kortet tillhandahåller ändå inte stift för en av USART-enheterna); Arduino-biblioteken konfigurerar USARTs för att använda asynkront läge, men jag behövde synkron med upp till 6 Mbps (och jag var tvungen att använda SPI-läge eftersom ingången måste behandlas som en rå bitström så inga stoppbitar / etc.), som också innebar att modifiera standardkonfigurationen för PIO-styrenheten.

Svar

I teorin …
Det finns inte riktigt ett Arduino-språk som sådant. Det är egentligen bara C ++ med några domänspecifika bibliotek. Dessa lägger till olika funktioner, till exempel funktioner som du kan ringa för att styra hårdvaran. Om du inte hade dessa funktioner, skulle du behöva lura direkt med specialregister för att kontrollera allt. Så är vanligtvis inbäddad programmering. Det går snabbt, men det kan vara ganska svårt att lära sig och förstå.

Förutom funktionerna lägger biblioteken till alternativa namn för vissa typer. Till exempel boolean och byte finns inte i C ++ -standarden. De motsvarar dock direkt bool och unsigned char.

Alla dessa saker betyder att du förmodligen kan porta allmänt C ++ – kod direkt till Arduino utan problem. Att gå tillbaka åt andra hållet kan dock kräva mindre redigering.

I praktiken …
Med detta sagt är programmering för Arduino inte exakt samma som allmän C ++ -programmering. Mycket av skillnaderna är dock vanliga för all inbäddad programmering (t.ex. begränsat minne och processorkraft).

Det är också värt att notera att om du använder den officiella Arduino IDE så finns det alla möjliga irriterande konstigheter och begränsningar för hur du ställer in din kod. Det finns lösningar i alla fall (såvitt jag inte vet), men de är ibland ganska frustrerande.

För full flexibilitet, använd en tredjeparts-IDE (som Eclipse) med ett plugin-program för att stödja Arduino. Det borde ge dig alla fördelarna med C ++, tillsammans med Arduino-biblioteken.

Kommentarer

Svar

Vilka är fördelarna med C ++ jämfört med Arduino-språket när man använder Arduino? Jag har erfarenhet av förbehandlade språk som JavaScript, PHP och har lurat med språk som Java och Visual Basic.

Först accepterar Arduino-kompilatorn / IDE C och C ++ som de är. Faktum är att många av biblioteken är skrivna i C ++. Mycket av det underliggande systemet är inte objektorienterat, men det kan vara.

Således är ”Arduino-språket” C ++ eller C.

C ++ samlas inte in i skräp. Den hanterar variabler i omfånget – om 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); } } 

Då hittar du att led och i inte växer eller läcker, oavsett hur många gånger du ringer till blinkTimes.

Om i skulle vara en klass skulle det på liknande sätt kasseras när funktionen avslutades. Så länge du inte använder new eller liknande minnesallokeringsfunktioner för att skapa nya objekt, då behöver du inte oroa dig för läckor.

Du kanske fortfarande tar slut på minnet om du skapar stora klasser och använder många av dem i djupt kapslade funktioner, men i allmänhet kommer du inte att stöta på problem tills du börjar hantera new och free -funktioner.

Om du använder new måste du ringa delete vid lämpliga tider. C ++, och i förlängningen Arduino, har ingen automatisk skräpsamling, du måste uttryckligen hantera ditt eget minne.

Kommentarer

  • Okej, om instanserade objekt (med nya) är inte ’ Om inte skräp samlas in, måste jag ’ också lära mig det. Jag antar att någon bok om C ++ kommer att täcka det. Tack för ett bra svar!

Svar

— Uppdatera 170412
Jag skrev mitt original svara för tre år sedan ur perspektivet att det finns en distinkt ”Arduino C ++”. Språket som används i IDE är standard C ++, eftersom det implementeras av GNU C ++ – kompilatorn. ”Tydliga” skillnader kryper in eftersom IDE kommer att göra lite förbehandling för att hjälpa nykomlingar till språket undvika ett par ”gotcha”, genom att fylla i några #includes, f / ex. Men du kan – och jag gör – skriva rätt C ++ till det och få precis vad du förväntar dig att få.
— slutuppdatering

Begränsa din användning av C ++ språkfunktioner till dem vars implementering du förstår helt. Det finns några funktioner som kompilerar till mer resurskrävande kod än vad som är uppenbart från att läsa källkoden. Den alternativt genererade .lss-listan (sammanslagen källa och sammansättning) kan ge dig god inblick i vad C ++ – kompilatorn gjorde när du inte tittade.

Till din fråga om minne: C ++ samlar inte sopor. Stackbaserade språk som C och C ++ tilldelar tillfälligt lagring på stacken för automatiska variabler vid funktionsinmatning, som sedan släpps när funktionen återvänder, men det här är inte sant skräpsamling. Objekt som skapats i heap- eller globalt minne lever tills du uttryckligen tar bort dem. Se till att du vet var, när och hur länge olika typer av objekt kommer att skapas. Du vill verkligen inte att din kod new -ing och delete -ing objekt kommer att vara noll. De kommer att byggas i högminne, fragmentera den och få den att växa upp i stacken. Det är då din kod – och din snälla ”copter – kommer att krascha.

C gör mindre för dig så att den kan göra mindre till dig. Det är inte ett dåligt val. C med några C ++ -funktioner kan vara ett ännu bättre val, med tanke på att du väljer extrafunktionerna klokt. C ++, om det är dina två val:

[Originalsvar] – C ++ är ett standardiserat språk Det används i stor utsträckning i många miljöer inklusive inbäddade system och testas därför mer noggrant än det mycket liknande C ++ -språket som är ”Arduino”. Detta är särskilt viktigt för verksamhetskritiska / säkerhetskritiska applikationer som du planerar. Krossad kod betyder en kraschad ”copter och även om den inte skadar någon, så bryter din dyra maskin.

  • Som standard är C ++ bärbar. Behöver du uppgradera din processor? Allt utom kiselspecifik kod kommer att portas till den nya. Behöver du byta verktygssats, utvecklingssystem, värd OS? C ++ kommer att stödjas överallt. Även om Arduino IDE körs var som helst Java stöds är det det enda verktyget som använder Arduino C ++ och det är också mycket begränsat l. Om du vill använda Eclipse, AVR-verktygen, gå barfota på kommandoraden, utveckla inom Emacs eller vilken annan miljö du föredrar, stöds standard C ++.

  • Arduino IDE gör saker bakom din rygg – specifikt innehåller den #h-filer när den tror att du behöver dem. Även om det är korrekt vill du verkligen skriva eller åtminstone se och förstå allt kompilatorn kommer att se. Programmeringsspråk är inte gjorda för datorer (datorer äter bitar till frukost); de är gjorda för människor, särskilt de som följer dig i projektet, varav den viktigaste kan vara … du !, när 6 månader efter du skrev en modul, du måste komma tillbaka för att förbättra den, eller mer sannolikt, fixa den. Du vill verkligen kunna se allt som kompilatorn ser.

Kommentarer

  • Detta är ett riktigt bra svar . Det verkar tydligt att du gillar C ++ och att jag också skulle vilja ha det! … Men på allvar hoppar jag ’ till höger på C ++ så snart jag ’ har förstått hur ” kommunikation ” med olika sensorer etc. fungerar.
  • Känner du till några bra böcker om ämnet? (Passar för mig som har programmerat i flera år på andra språk och bara behöver ” inbäddad del ” i C ++.)
  • Tycker du att Accelerated C ++ är en bra bok för detta?
  • Jag önskar att jag kunde hjälpa dig med ’ höger ’ bok, men jag kom till C ++ med en hel del C bakom mig och Kernighan & Ritchie ’ s C-programmeringsspråket är fortfarande min go-to-bok (dålig ordlek) för allt som inte uttryckligen C ++, och Ellis & Stroustrup ’ s Den kommenterade C ++ referenshandboken för C ++. Men för att skriva till hårdvara kommer du ’ att göra det bra att titta på några av enhetsbiblioteken som användarna har bidragit till på Arduino.cc . Börja med att justera I / O-portar med pinMode (), digitalWrite () och digitalRead () -funktioner, sedan deras analoga i / o-motsvarigheter, och så småningom, …
  • … planerar att skriva direkt till I / O registrerar för förbättringar av hastighet och minne. Program som blinky.cpp och hello.cpp är bra ställen att börja röra med hårdvara på. Lägg till en enkel multimeter och några lysdioder med rätt strömbegränsande motstånd som är permanentlödda på ett ben och du borde kunna se verkliga, om enkla, resultat från dina ansträngningar. Därefter läser du datablad för all hårdvara som intresserar dig att lära dig vilka signaler du kan läsa / måste skriva till dem för att få dem att spela. Temperatursensorer är lätta att använda och behöver inte ’ alla kylskåp? Ha kul!

Svar

Arduino-språket är C ++, men det är väldigt annorlunda än de flesta C ++ – sorter.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *