Care sunt avantajele fiecărei limbi atunci când se utilizează Arduino?
Cred că este o întrebare generală bună, dar eu „Voi adăuga un pic despre motivul pentru care îmi cer dacă cineva vrea să-mi dea un sfat.
Am experiență în limbaje preprocesate, cum ar fi JavaScript, PHP și am jucat cu limbaje precum Java și Visual Basic. Cu alte cuvinte, cunosc tehnici de programare și orientarea obiectelor atât clasică, cât și prototipică, dar nimic despre comunicarea directă cu hardware-ul.
Fac un octocopter și mă gândesc că o abordare orientată pe obiecte va fi cea mai ușoară. (Software-ul va avea foarte multe funcții …) Cu toate acestea, nu am scris niciodată în C ++.
Deoarece acesta este un Q & Un site care se presupune că pentru a-i ajuta pe ceilalți, doar întrebarea generală prezentată la început este foarte importantă, dar aș aprecia orice comentarii referitoare la situația mea.
Comentarii
Răspuns
Experiența mea personală ca profesor (programare, mecatronică) este că, dacă aveți experiență anterioară în programare și sunteți conștienți de concepte ca OOP, este mai bine să alegeți C / C ++. Limbajul arduino este foarte bun pentru începători, dar are unele limitări (de exemplu, trebuie să aveți toate fișierele în același folder). Și este practic o simplificare a C / C ++ (puteți copia practic & lipiți codul arduino într-un fișier C / C ++ și va funcționa). De asemenea, este logic să puteți folosi un IDE complet cunoscut ca eclipsă:
http://playground.arduino.cc/Code/Eclipse
Inițial este necesar un pic mai mult de configurare și configurare a mediului dvs. de dezvoltare, dar IMHO merită pentru programatorii cu experiență în orice altă limbă.
În orice caz, nu vă va face rău să începeți să utilizați limbajul arduino și IDE-ul arduino timp de câteva zile pentru a vă familiariza cu hardware-ul arduino și apoi treceți la C / C ++ cu Eclipse pentru a vă dezvolta cu adevărat proiectul.
Comentarii
- Vă mulțumim pentru gânduri. ‘ voi folosi IDE-ul Arduino pentru a afla cum să controlez toate hardware-urile piese precum senzori și ecrane LCD etc. Apoi, ‘ mă voi deplasa la C ++ pentru a crea software-ul pentru octocopter. Știți o carte bună și scurtă pentru oamenii care cunosc alte limbi? ” problema ” cu multe cărțile pe care ‘ le-am găsit includ atât de mult încât nu am nevoie de ‘ pentru că ‘ m pe un microcontroler Atmel mic, mai degrabă decât pe un computer UI.
- Există o carte frumoasă ” C Programare pentru Arduino ” de Julien Bayle, care este util. Nu este un limbaj C ++, dar ar trebui să vă ajute să înțelegeți baza.
- Aceasta este o cerere bună: o carte scurtă și bună cu elementele de bază ale C ++ pentru programatorii altor limbi. Îmi pare rău că nu pot da recomandări, nu știu niciunul bun. De fapt, am scris o carte, cu un accent practic (dezvoltați un joc video) pentru studenții mei, dar este doar în spaniolă. Pentru o carte C ++ bună și practică, aș recomanda Deitel & Deitel Cum se programează C ++, puteți sări peste multe capitole avansate.
- C ++ acceptă caracteristici OO, limbaj C nu.
- @FriendofKim Nu exact ceea ce am vrut să spun (deși din punct de vedere tehnic ați putea, Due este suficient de rapid pentru a suporta o soluție software pentru comunicații seriale non-megabite și are 5 U (S) ARTS în total, în timp ce bibliotecile Arduino furnizează doar 4 dintre ele, însă placa Due nu furnizează oricum pini pentru unul dintre USART-urile); bibliotecile Arduino configurează USART-urile pentru a utiliza modul asincron, dar aveam nevoie de sincronizare de până la 6 Mbps (și trebuia să folosesc modul SPI deoarece intrarea trebuia tratată ca un flux de biți brut, deci fără biți de oprire / etc.)), care a implicat și modificarea configurării implicite a controlerului PIO.
Răspuns
În teorie …
Nu există într-adevăr un limbaj Arduino ca atare. Este într-adevăr doar C ++ cu unele biblioteci specifice domeniului. Acestea adaugă diverse funcții, cum ar fi funcții pe care le puteți apela pentru a controla hardware-ul. Dacă nu ați avea aceste funcții, ar trebui să vă lăsați direct cu registre speciale pentru a controla totul. Așa se face programarea încorporată. Este rapid, dar poate fi destul de greu de învățat și de înțeles.
În plus față de funcții, bibliotecile adaugă nume alternative pentru unele tipuri. De exemplu, boolean
și byte
nu se află în standardul C ++. Cu toate acestea, acestea sunt direct echivalente cu bool
și unsigned char
.
Toate aceste lucruri înseamnă că probabil poți purta portul general Cod C ++ direct către Arduino fără dificultate. Cu toate acestea, revenirea în sens invers poate necesita o modificare redusă.
În practică … upă ce am spus toate acestea, programarea pentru Arduino nu este exact la fel ca programarea generală C ++. Multe dintre diferențe sunt comune tuturor programărilor încorporate (cum ar fi memoria limitată și puterea de procesare).
De asemenea, este demn de remarcat faptul că, dacă utilizați IDE-ul oficial Arduino, există tot felul de ciudățenii enervante și limitări privind modul în care vă configurați codul. Există soluții alternative în toate cazurile (din câte știu) dar uneori sunt destul de frustrante.
Pentru flexibilitate deplină, utilizați un IDE terță parte (cum ar fi Eclipse) cu un plug-in pentru a sprijini Arduino. Acest lucru ar trebui să vă ofere toate avantajele C ++, împreună cu bibliotecile Arduino.
Comentarii
- Aici ‘ este configurarea mea pentru Eclipse, care funcționează bine cu Arduino. arduino.stackexchange.com/a/75491/7727 . Nu ‘ nu folosesc niciun plugin Arduino, doar Eclipse pur pentru C / C ++.
Răspunde
Care sunt avantajele C ++ față de limbajul Arduino atunci când se utilizează Arduino? Am „experiență în limbaje preprocesate, cum ar fi JavaScript, PHP și am jucat cu limbaje precum Java și Visual Basic.
În primul rând, compilatorul / IDE Arduino acceptă C și C ++ ca atare. De fapt, multe dintre biblioteci sunt scrise în C ++. O mare parte din sistemul de bază nu este orientat obiect, dar ar putea fi.
Astfel, „limbajul arduino” este C ++ sau C.
C ++ nu este colectat la gunoi. Gestionează variabilele din domeniul de aplicare – dacă scrieți:
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); } }
Atunci veți găsi că led
și i
nu „cresc sau scurg, indiferent de câte ori sunați blinkTimes
.
Dacă i
ar fi o clasă, ar fi eliminată în mod similar odată cu încheierea funcției. Deci, atâta timp cât nu folosiți new
sau funcții similare de alocare a memoriei pentru a crea obiecte noi, atunci nu va trebui să vă faceți griji cu privire la scurgeri.
Este posibil să rămâneți fără memorie, dacă creați clase imense și le folosești pe multe în funcții adânc imbricate, dar, în general, nu vei avea probleme până nu vei începe să te ocupi de new
și free
funcții.
Dacă utilizați new
, va trebui să apelați delete
la momente adecvate. C ++ și, prin extensie, Arduino, nu are o colectare automată a gunoiului, trebuie să vă gestionați în mod explicit propria memorie.
Comentarii
- Bine, dacă obiectele sunt instantanee (cu noul) nu sunt ‘ t gunoi colectat, va trebui să ‘ să învăț și asta. Presupun că orice carte despre C ++ va acoperi asta. Vă mulțumim pentru un răspuns bun!
Răspuns
— Actualizare 170412
Am scris originalul meu răspunde acum trei ani din perspectiva existenței unui „Arduino C ++” distinct. Limbajul utilizat în IDE este standard C ++, deoarece este implementat de compilatorul GNU C ++. Diferențele „aparente” se strecoară, deoarece IDE va face unele prelucrări prealabile pentru a ajuta noii veniți în limbă să evite câteva „gotcha”, completând câteva #include, f / ex. Dar puteți – și eu – să scrieți C ++ corect pe acesta și să obțineți exact ceea ce vă așteptați să obțineți.
— finalizați actualizarea
Limitați utilizarea caracteristicilor limbajului C ++ la cei a căror implementare să înțeleagă pe deplin. Există unele caracteristici care se compilează la un cod mai intensiv din resurse decât este evident din citirea codului sursă. Listarea generată opțional .lss (sursă și asamblare combinate) vă poate oferi o perspectivă bună despre ceea ce a făcut compilatorul C ++ când nu căutați.
La întrebarea dvs. despre memorie: C ++ nu colectează gunoiul. Limbajele bazate pe stivă, cum ar fi C și C ++, alocă stocarea temporară pe stivă pentru variabilele automate la intrarea funcției, care apoi este eliberată la revenirea funcției, dar acest lucru nu este adevărat. Obiectele create în memoria heap sau globală trăiesc până când le ștergeți în mod explicit. Asigurați-vă că știți unde, când și pentru cât timp vor fi create diferite tipuri de obiecte. Nu doriți cu adevărat codul dvs. new
-ing și delete
-ing obiecte vrând nevrând. Acestea vor fi încorporate în memoria heap, fragmentându-l și făcându-l să crească în stivă. Atunci când codul tău – și drăguțul tău „copter – se va prăbuși.
C face mai puțin pentru tine, astfel încât să poată face mai puțin 1da13cf8e1 „>
pentru dumneavoastră. Nu este o alegere proastă. C cu câteva dintre caracteristicile C ++ poate fi o alegere și mai bună, având în vedere că alegeți în mod judicios funcțiile suplimentare. C ++, dacă acestea sunt cele două opțiuni:
[Răspuns original] – C ++ este un limbaj standardizat .Este implementat pe scară largă în multe medii, inclusiv sisteme încorporate și, prin urmare, este testat mai amănunțit decât limbajul foarte asemănător C ++, care este „Arduino”. Acest lucru este deosebit de important pentru aplicațiile critice de misiune / critice de siguranță, precum planificați. Codul blocat înseamnă un „copter blocat și chiar dacă nu rănește pe cineva, va sparge mașina dvs. scumpă.
-
Fiind standard, C ++ este portabil. Trebuie să vă actualizați procesorul? Totul, cu excepția codului specific siliciu, va fi portat la cel nou. Trebuie să vă schimbați setul de instrumente, sistemul de dezvoltare, sistemul de operare gazdă? C ++ va fi acceptat peste tot. Deși Arduino IDE va rula oriunde este acceptat Java, este singurul instrument care folosește Arduino C ++ și este foarte limitat l. Dacă doriți să utilizați Eclipse, instrumentele AVR, mergeți desculți pe linia de comandă, dezvoltați-vă în Emacs sau orice alt mediu preferați, C ++ standard va fi acceptat.
-
ID-ul Arduino face lucruri în spatele tău – în mod specific, include fișiere .h atunci când crede că ai nevoie de ele. Chiar dacă este corect, chiar vrei să scrii, sau măcar să vezi și să înțelegi, tot ce compilatorul va vedea. Limbajele de programare nu sunt făcute pentru computere (computerele mănâncă bucăți la micul dejun); sunt făcute pentru oameni, în special pentru persoanele care vă urmăresc în proiect, dintre care cel mai important poate fi … voi !, când 6 luni după ați scris un modul, trebuie să vă întoarceți pentru a-l îmbunătăți sau, mai probabil, pentru a-l repara. Doriți cu adevărat să puteți vedea tot ceea ce vede compilatorul.
Comentarii
- Acesta este un răspuns REAL . Pare clar că îți place C ++ și că și mie ar trebui să-mi placă! … Dar serios, ‘ voi sări direct pe C ++ imediat ce am ‘ înțeles cum ” comunicare ” cu diferiți senzori etc. funcționează.
- Știți cărți bune despre acest subiect? (Potrivit pentru mine care programează de ani de zile în alte limbi și au nevoie doar de ” partea încorporată ” din C ++.)
- Crezi că Accelerated C ++ este o carte bună pentru asta?
- Aș vrea să te pot ajuta cu ‘ dreapta ‘ carte, dar am venit la C ++ cu o mulțime de C în spatele meu și Kernighan & Ritchie ‘ s Limbajul de programare C este în continuare cartea mea de intrare (joc de cuvinte rău) pentru orice lucru care nu este explicit C ++ și Ellis & Stroustrup ‘ s Manualul de referință C ++ adnotat pentru C ++. Dar pentru a scrie pe hardware, ‘ veți face bine să examinați unele biblioteci de dispozitive contribuite de utilizatori la Arduino.cc . Începeți reglarea porturilor I / O cu funcțiile pinMode (), digitalWrite () și digitalRead (), apoi omologii lor analogici de ieșire și, în cele din urmă, …
- … intenționați să scrieți direct pe Registrele I / O pentru îmbunătățirea vitezei și a spațiului de memorie. Programe precum blinky.cpp și hello.cpp sunt locuri bune pentru a începe să vă încurcați cu hardware-ul. Adăugați un multimetru simplu și câteva LED-uri cu rezistențe potrivite pentru limitarea curentului lipite permanent la un picior și ar trebui să puteți vedea rezultate reale, chiar dacă simple, din eforturile dvs. După aceea, citiți fișele tehnice pentru orice hardware care vă interesează să aflați ce semnale puteți citi / trebuie să le scrieți pentru a le face să joace. Senzorii de temperatură sunt ușor de utilizat și nu ‘ toată lumea are nevoie de un frigider? Distrează-te!
Răspuns
Limba Arduino este C ++, dar este foarte diferit de majoritatea soiurilor C ++.
C++ vs. The Arduino Language?
– ” Limbajul Arduino ” este C ++. Există un pic de preprocesare pentru a vă salva să faceți prototipuri de funcții, dar cel mai sigur este C ++.