Quali sono i vantaggi di ogni lingua quando si usa Arduino?
Penso che questa sia una buona domanda generale, ma io Aggiungerò qualcosa sul motivo per cui sto chiedendo se qualcuno vuole darmi un suggerimento.
Ho esperienza in linguaggi preelaborati come JavaScript, PHP e ho giocherellato con linguaggi come Java e Visual Basic. In altre parole, conosco le tecniche di programmazione e lorientamento agli oggetti sia classico che prototipale, ma niente sulla comunicazione diretta con lhardware.
Sto creando un ottocottero e penso che un approccio orientato agli oggetti sarà il più semplice. (Il software avrà moltissime funzionalità …) Tuttavia non ho mai scritto in C ++.
Poiché questo è un Q & Un sito che “si suppone per aiutare gli altri, solo la domanda generale presentata allinizio è di grande importanza, ma apprezzerei qualsiasi commento sulla mia situazione.
Commenti
Risposta
La mia esperienza personale come professore (programmazione, meccatronica) è che se hai precedenti esperienze di programmazione e sei a conoscenza di concetti come OOP, è meglio optare per C / C ++. Il linguaggio arduino è davvero ottimo per i principianti, ma ha alcune limitazioni (ad esempio, devi avere tutti i tuoi file nella stessa cartella). Ed è fondamentalmente una semplificazione di C / C ++ (puoi praticamente copiare & incollare il codice arduino in un file C / C ++ e funzionerà). Inoltre ha senso che tu possa utilizzare un IDE ben noto come eclipse:
http://playground.arduino.cc/Code/Eclipse
Inizialmente è richiesto un po più di impostazione e configurazione del tuo ambiente di sviluppo, ma IMHO ne vale la pena per i programmatori con esperienza in qualsiasi altro linguaggio.
In qualsiasi caso, non ti farà male iniziare a utilizzare il linguaggio arduino e lIDE arduino per alcuni giorni per familiarizzare con lhardware arduino e poi passare a C / C ++ con Eclipse per sviluppare davvero il tuo progetto.
Commenti
- Grazie per i tuoi pensieri. ‘ userò lIDE di Arduino per imparare a controllare tutti i diversi hardware pezzi come sensori e schermi LCD ecc. Poi ‘ passerò a C ++ per creare il software per loctocottero Conosci un buon e breve libro per persone che conoscono altre lingue? Il ” problema ” con molti i libri che ‘ ho trovato è che contengono così tante cose che non ‘ mi servono perché ‘ m su un piccolo microcontrollore Atmel anziché su un computer con interfaccia utente.
- Cè un bel libro ” Programmazione in C per Arduino ” di Julien Bayle che è utile. Non è un linguaggio C ++ ma dovrebbe aiutarti a capire le basi.
- Questa è una buona richiesta: un breve e buono libro con le basi del C ++ per programmatori di altri linguaggi. Mi dispiace non posso dare alcun consiglio, non sono a conoscenza di uno buono. In effetti, ho scritto un libro, con un focus pratico (sviluppare un videogioco) per i miei studenti, ma è solo in spagnolo. Per un buon e pratico libro in C ++ consiglierei Deitel & Deitel Come programmare C ++, potresti saltare molti capitoli avanzati.
- C ++ supporta le funzionalità OO, linguaggio C non.
- @FriendofKim Non esattamente quello che volevo dire (anche se tecnicamente potresti, il Due è abbastanza veloce da supportare una soluzione software per la comunicazione seriale non megabit, e ha 5 U (S) ARTS in totale mentre le librerie Arduino ne forniscono solo 4 ma in ogni caso la scheda Due non fornisce comunque i pin per una delle USART); le librerie Arduino configurano gli USART per utilizzare la modalità asincrona, ma avevo bisogno di sincrono fino a 6 Mbps (e dovevo usare la modalità SPI poiché linput doveva essere trattato come un bitstream grezzo quindi nessun bit di stop / ecc.), che implicava anche la modifica della configurazione del controller PIO predefinito.
Risposta
In teoria …
Non esiste un linguaggio Arduino in quanto tale. In realtà è solo C ++ con alcune librerie specifiche del dominio. Questi aggiungono varie funzionalità, come le funzioni che puoi chiamare per controllare lhardware. Se non hai queste funzioni, avresti bisogno di giocherellare direttamente con registri speciali per controllare tutto. Di solito è così che viene eseguita la programmazione incorporata. È veloce, ma può essere abbastanza difficile da imparare e da capire.
Oltre alle funzioni, le librerie aggiungono nomi alternativi per alcuni tipi. Ad esempio, boolean
e byte
non sono nello standard C ++. Tuttavia, sono direttamente equivalenti a bool
e unsigned char
.
Tutte queste cose significano che probabilmente puoi eseguire il port general Codice C ++ direttamente su Arduino senza difficoltà. Tuttavia, tornare indietro nellaltro modo potrebbe richiedere alcune modifiche minori.
In pratica … etto questo, la programmazione per Arduino non è esattamente la stessa della programmazione generale in C ++. Molte differenze sono comuni a tutta la programmazione incorporata (come memoria e potenza di elaborazione limitate).
Vale anche la pena notare che se stai usando lIDE ufficiale di Arduino, ci sono tutti i tipi di fastidiose stranezze e limitazioni su come imposti il tuo codice. Ci sono soluzioni alternative in tutti i casi (per quanto ne so), ma a volte sono piuttosto frustranti.
Per la massima flessibilità, usa un IDE di terze parti (come Eclipse) con un plug-in per supportare Arduino. Questo dovrebbe darti tutti i vantaggi di C ++, insieme alle librerie Arduino.
Commenti
- Qui ‘ è la mia configurazione per Eclipse, che funziona bene con Arduino. arduino.stackexchange.com/a/75491/7727 . Non ‘ uso alcun plug-in Arduino, solo puro Eclipse per C / C ++.
Risposta
Quali sono i vantaggi di C ++ rispetto al linguaggio Arduino quando si utilizza Arduino? Ho esperienza in linguaggi preelaborati come JavaScript, PHP e ho giocherellato con linguaggi come Java e Visual Basic.
Innanzitutto, il compilatore / IDE Arduino accetta C e C ++ così come sono. In effetti molte delle librerie sono scritte in C ++. Gran parte del sistema sottostante non è orientato agli oggetti, ma potrebbe esserlo.
Quindi, “Il linguaggio arduino” è C ++ o C.
C ++ non viene raccolto in modo indesiderato. Gestisce le variabili nellambito – se scrivi:
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); } }
Allora troverai che led
e i
non crescono o perdono, indipendentemente da quante volte chiami blinkTimes
.
Se i
fosse una classe, verrebbe eliminata in modo simile una volta terminata la funzione. Quindi, a patto di non utilizzare new
o simili funzioni di allocazione della memoria per creare nuovi oggetti, quindi non dovrai preoccuparti delle perdite.
Potresti ancora esaurire la memoria, se crei classi enormi e ne usi molte in funzioni profondamente annidate, ma in generale non avrai problemi finché non inizi a trattare con new
e free
.
Se utilizzi new
, dovrai chiamare delete
al momento opportuno. C ++, e per estensione Arduino, non ha una garbage collection automatica, devi gestire esplicitamente la tua memoria.
Commenti
- Ok, se istanziati oggetti (con il nuovo) aren ‘ t garbage collector, ‘ dovrò imparare anche questo. Suppongo che qualsiasi libro su C ++ lo tratterà. Grazie per una buona risposta!
Risposta
— Aggiornamento 170412
Ho scritto il mio originale rispondo tre anni fa dal punto di vista dellesistenza di un distinto “Arduino C ++”. Il linguaggio utilizzato nellIDE è lo standard C ++, perché è implementato dal compilatore GNU C ++. Differenze “apparenti” si insinuano perché lIDE farà un po di pre-elaborazione per aiutare i nuovi arrivati alla lingua a evitare un paio di “trucchi”, compilando alcuni #include, f / ex. Ma puoi – e io lo faccio – scrivere in C ++ corretto e ottenere esattamente ciò che ti aspetti di ottenere.
— fine aggiornamento
Limita il tuo uso delle funzionalità del linguaggio C ++ a coloro la cui implementazione tu capito perfettamente. Ci sono alcune funzionalità che si compilano in codice più dispendioso in termini di risorse di quanto sia ovvio dalla lettura del codice sorgente. Lelenco .lss (sorgente unito e assembly) generato facoltativamente può darti una buona visione di ciò che faceva il compilatore C ++ quando non stavi guardando.
Alla tua domanda sulla memoria: C ++ non effettua operazioni di garbage collection. I linguaggi basati su stack come C e C ++ allocano una memoria temporanea sullo stack per le variabili automatiche allingresso della funzione, che poi viene rilasciato quando la funzione ritorna, ma questo non è vero garbage collection. Gli oggetti creati nellheap o nella memoria globale rimangono attivi finché non vengono eliminati esplicitamente. Assicurati di sapere dove, quando e per quanto tempo verranno creati diversi tipi di oggetti. Non vuoi davvero che il tuo codice new
-ing e delete
-ing oggetti volenti o nolenti. Saranno incorporati nella memoria heap, frammentandolo e facendolo crescere nella pila. Quello “è quando il tuo codice – e il tuo simpatico” elicottero – andranno in crash.
C fa di meno per te quindi può fare di meno per te. Non è una cattiva scelta. Il C con alcune caratteristiche del C ++ può essere una scelta ancora migliore, dato che scegli le funzionalità extra con giudizio.C ++, se queste sono le tue due scelte:
[Risposta originale] – C ++ è un linguaggio standardizzato È ampiamente distribuito in molti ambienti, inclusi i sistemi embedded e quindi è testato in modo più approfondito rispetto al linguaggio C ++ molto simile che è “Arduino”. Ciò è particolarmente importante per le applicazioni mission-critical / safety-critical come quelle che stai pianificando. Il codice in crash significa un “elicottero che si è schiantato e anche se non danneggia qualcuno, romperà la tua costosa macchina.
-
Essendo standard, C ++ è portabile. Hai bisogno di aggiornare il tuo processore? Tutto tranne il codice specifico del silicio verrà trasferito a quello nuovo. Hai bisogno di cambiare il tuo set di strumenti, sistema di sviluppo, sistema operativo host? C ++ sarà supportato ovunque. Sebbene lIDE di Arduino funzionerà ovunque sia supportato Java, è lunico strumento che utilizza Arduino C ++ ed è anche molto limitato l. Se vuoi usare Eclipse, gli strumenti AVR, andare a piedi nudi sulla riga di comando, sviluppare allinterno di Emacs o qualsiasi altro ambiente tu preferisca, sarà supportato lo standard C ++.
-
LIDE di Arduino fa le cose alle tue spalle, in particolare, #include i file .h quando pensa che tu ne abbia bisogno. Anche se è corretto, vuoi davvero scrivere, o almeno vedere e capire, tutto ciò che il compilatore vedrà. I linguaggi di programmazione non sono fatti per i computer (i computer mangiano pezzi a colazione); sono fatti per le persone, in particolare le persone che ti seguono nel progetto, la più importante delle quali potrebbe essere … tu !, quando 6 mesi dopo hai scritto un modulo, devi tornare indietro per migliorarlo, o più probabilmente, aggiustarlo. Vuoi davvero essere in grado di vedere tutto ciò che vede il compilatore.
Commenti
- Questa è una risposta VERAMENTE buona . È chiaro che ti piace il C ++ e che dovrebbe piacermi anche a me! … Ma seriamente, ‘ passerò direttamente a C ++ non appena ‘ ho capito come ” comunicazione ” con i diversi sensori, ecc. funziona.
- Conosci qualche buon libro sullargomento? (Adatto a me che programma da anni in altre lingue e ho bisogno solo della ” parte incorporata ” di C ++.)
- Pensi che C ++ accelerato sia un buon libro per questo?
- Vorrei poterti aiutare con ‘ right ‘ libro, ma sono arrivato in C ++ con un sacco di C dietro di me e Kernighan & Ritchie ‘ s The C Programming Language è ancora il mio libro di riferimento (pessimo gioco di parole) per tutto ciò che non è esplicitamente C ++, ed Ellis & Stroustrup ‘ s Manuale di riferimento C ++ con annotazioni per C ++. Ma per scrivere su hardware, ‘ farai bene a guardare alcune delle librerie di dispositivi fornite dagli utenti in Arduino.cc . Inizia a modificare le porte I / O con le funzioni pinMode (), digitalWrite () e digitalRead (), quindi le loro controparti di i / o analogiche e, infine, …
- … pianifica di scrivere direttamente su Registri di I / O per migliorare la velocità e lo spazio di memoria. Programmi come blinky.cpp e hello.cpp sono buoni posti per iniziare a scherzare con lhardware. Aggiungi un semplice multimetro e alcuni LED con i giusti resistori di limitazione della corrente saldati in modo permanente a una gamba e dovresti essere in grado di vedere i risultati reali, seppur semplici, dei tuoi sforzi. Dopodiché, leggi le schede tecniche di qualsiasi hardware che ti interessa per imparare quali segnali puoi leggere / devi scrivere su di loro per farli suonare. I sensori di temperatura sono facili da usare e ‘ non tutti hanno bisogno di un registratore di frigorifero? Buon divertimento!
Rispondi
Il linguaggio Arduino è C ++, ma lo è molto diverso dalla maggior parte delle varietà C ++.
C++ vs. The Arduino Language?
– La ” Lingua Arduino ” è C ++. Cè un po di pre-elaborazione per risparmiarti di fare prototipi di funzioni, ma sicuramente è C ++.