consiglio tra c e c++

ciao a tutti, da qualche mese ho acquistato un arduino UNO r3 e grazie a guide e questo forum sono riuscito a realizzare molti progettini interessanti. In questo periodo stavo valutando di cominciare a studiare un linguaggio di programmazione più completo che mi possa servire su più fronti che mi permetta di programmare anche altri micro oltre a quello classico di arduino. Dopo un po di ricerche in rete e sul forum penso di essere arrivato alla decisione di provare con il c oppure c++ ma a questo punto è nato un dilemma e cioè cosa mi conviene studiare il c oppure il c++ diciamo che la differenza tra un linguaggio e l altro a grosse linee l ho capito quello che volevo capire è che limiti ha il c rispetto al c++ per quello che riguarda la programmazione dei micro e viceversa e se mi sapete indicare qualche guida che parta dal c affiancato all arduino.... grazie in anticipo dell'aiuto spero di essere stato abbastanza chiaro...

Già discusso tempo fa ... http://forum.arduino.cc/index.php?topic=173884.0

Con una "Search" nel forum lo avresti trovato ... ]:D

Guglielmo

ci ero gia capitato in quel topic ma non sono riuscito a dare una risposta alla mia domanda probabilmente non sono stato chiaro o non ho capito quello che era inteso nel topic che mi hai linkato...praticamente quello che vorrei capire è se io mi metto a studiare c++ ho la possibilità di fare sul micro tutto cio che voglio oppure su alcune cose avrei ostacoli e dovrei ricorrere al c o altro???? dalla tua esperienza cosa mi consiglieresti studiare c oppure c++??? grazie per la tempestiva risposta....

bonde88: ma a questo punto è nato un dilemma e cioè cosa mi conviene studiare il c oppure il c++ diciamo che la differenza tra un linguaggio e l altro a grosse linee l ho capito quello che volevo capire è che limiti ha il c rispetto al c++

Quando si parla di programmare piccole mcu/micro esistono solo due linguaggi, l'assembly e il C, in realtà è il C++ a porti dei limiti e non il C, sebbene il primo sia più amichevole impegna maggiori risorse, sopratutto di ram, e questo può creare non pochi problemi quando si lavora con le mcu. Il C++ va bene per lavorare su mcu/micro di fascia alta, p.e. con i sistemi linux embedded basati su processori con core ARM puoi tranquillamente utilizzare il C++.

@astro ti consiglia giusto.

Io aggiungerei che se studi il C++ comunque studi anche il C visto che C++ ne è una sorta di "estensione". Su una piccola MCU non potrai applicare alcuni meccanismi C++ che impegnano troppe risorse, ma che comunque potrai usare su un PC con più risorse. Tieni conto che alcune librerie di Arduino sfruttano le classi e perciò qualcosa di C++ è utile.

Parti col C, studiati bene i costrutti base, passa poi ai puntatori, alle union e alle strutture. Una volta compreso tutto puoi passare al C++ studiando gli stream e le classi.

nid69ita: Io aggiungerei che se studi il C++ comunque studi anche il C visto che C++ ne è una sorta di "estensione".

Vero. Aggiungo pure il fatto che scrivere un programma in ANSI C, il C puro per definizione, permette sempre di sapere l'esatta quantità di ram impegnata subito dopo la compilazione, mentre col C++ è possibile sapere solo l'impegno statico della ram, ovvero in runtime è possibile sforare la ram disponibile sia nel segmento dati che in quello del heap con disastrose conseguenze per il nostro programma. Purtroppo sulle piccole mcu non è possibile avere i meccanismi di difesa contro l'eccessivo uso della ram presenti su i programmi in C++ per un pc dove nel peggiore dei casi viene semplicemente terminato con relativo pop up di errore che ci informa di quello che è successo. Sulle mcu/micro quello che succede in caso di sforo ram/heap è imprevedibile, si va dal semplice blocco in loop perenne del micro ai salti random in varie porzioni della memoria con relativa esecuzione del codice trovato, inutile dire che se la nostra mcu/micro controlla degli attuatori (motori, servo, led, relè, etc) questi possono essere azionati in modo imprevedibile con possibili conseguenze nefaste sul nostro hardware e con potenziali rischi per la sicurezza di chi si trova vicino al circuito.

grazie per le dritte allora partirò a studiare il C e fare qualche piccola prova con arduino…per caso mi sapreste indicare qualche buona guida o testo/ebook che tratta arduino e C da dove posso partire? nel topic linkato da gpb01 parlavano di un libro intitolato “Beginning C for Arduino” che guardero sicuramente.
ci sono speranze di trovare qualcosa in italiano oppure me ne devo fare una ragione e cercare solo testi in inglese???

In italiano questa guida sul C in Arduino, è interessante e ben fatta: http://www.itisvoltafr.it/~marsella/

E' la pagina di una professoressa. Devi cliccare su "Programmare Arduino" a destra Interessante anche il pdf "Applicazioni con Arduino" sempre in quella pagina.

Esistono poi libri in italiano (a pagamento) su Arduino e C. Ad esempio: http://www.amazon.it/Arduino-guida-ufficiale-Massimo-Banzi/dp/8848127266/ref=sr_1_2?ie=UTF8&qid=1374837798&sr=8-2&keywords=arduino http://www.amazon.it/gp/product/8850330448/sr=8-5/qid=1374837820/ref=olp_product_details?ie=UTF8&me=&qid=1374837820&seller=&sr=8-5

testi molto interessanti ma trattano Arduino dal punto di vista diciamo classico non è C vero è proprio giusto????cominciano a venirmi forti dubbi a questo proposito io avevo capito che arduino aveva una sorta di suo linguaggio che è SIMILE a C....

No, Arduino viene compilato usando il GCC che è un compilatore per linguaggio C/C++ (e altro) ed è Gnu-c-c Perciò in Arduino programmi in C/C++ usando delle librerie distribuite assieme all'IDE fornite dal team Arduino e da atmel (avr) Mi sembra che questo "ambiente" o framework lo chiamano Wire (se dico una cavolata correggetemi).

Ad esempio digitalRead() è una funzione delle librerie di Arduino, che permette di leggere i pin di varie board senza usare comandi a basso livello.

Poi tieni conto che uno sketch di Arduino è sempre un programma C "mascherato". Di nascosto il compilatore ha il classico main:

int main()
{  setup()
   while (1) loop();
}

che richiama le tue funzioni setup() una volta e di continuo la tua funzione loop() (Fa anche altre cose, questo è uno schema minimale).

Io aggiungerei che se studi il C++ comunque studi anche il C visto che C++ ne è una sorta di "estensione". Su una piccola MCU non potrai applicare alcuni meccanismi C++ che impegnano troppe risorse, ma che comunque potrai usare su un PC con più risorse. Tieni conto che alcune librerie di Arduino sfruttano le classi e perciò qualcosa di C++ è utile.

A questo ci sarebbe arrivato da solo se avesse cercato nella rete, in più conoscerebbe le origini del C, chi lo ha creato, saprebbe le origini del C++ e chi è il creatore. Saprebbe perché è è stato creato il C++, come si chiamava prima di chiamarsi C++ ecc. Documentandosi sarebbe arrivato alle ovvie conclusioni: Il C o C++ si studia e si sperimenta sul PC. Lo sviluppo di programmi embedded su dispositivi a microprocessore con ridotte risorse hardware è differente dallo sviluppo di programmi su PC. Aquisite le minime competenze con i linguaggi C o C++ si è pronti a passare allo sviluppo su piattaforme embedded come arduino. Bisogna ora conoscere arduino, dedicare del tempo per leggere qualcosa di generico sui microcontroller, per sapere cosa è una "porta", di quanti bit è composta ecc, cosa c'è dentro il microcontroller oltre alle "porte" ecc.

Queste sono tutte informazioni che si trovano in rete, purtroppo in rete si trovano anche documenti per niente attendibili, ma è facile mettere in dubbio l'informazione, se questa dipinge la situazione semplice quasi banale e meglio avere riserve in merito alla attendibilità di ciò che si legge. In ogni caso informazioni provenienti da aziende produttrici di elettronica sono da considerare attendibili.

Altri utenti hanno postato domande simili e quando li leggo ho l'impressione che questi utenti abbiano aperto un libro a metà e di li hanno cominciato a leggere magari pure pretendendo di capirci qualcosa, in sostanza ritengo che il metodo/approccio usato da questi utenti non segue alcun filo logico.

Scrivo queste cose perché mi toccano da vicino: Mio nipote si vergogna a non sapere le cose, ma non fa nulla per documentarsi, e acquisisce informazioni distorte da amici e parenti e dai media e da fede su queste informazioni come se le avessi ricavate lui studiando.

Gli utenti che si avvicinano ad arduino restano sicuramente affascinati da quello che è possibile fare e credono alla favoletta, si si fa così e semplice, che ci vuole piggi qui, connetti questo e quello e ualà.

Il consiglio che non verrà preso è: Parti dalle origini del linguaccio C e C++ (mica devi sapere tutta la storia ti basta una infarinatura che ti costa 30 minuti di lettura. Parti dalle basi generiche sui microcontroller o microprocessori (10 ore di lettura, per una infarinatura) Parti dalle basi di Arduino (10 ore di lettura per l'infarinatura)

Dopo posta le domande a cui non sei riuscito a trovare risposte su questo forum, se posti prima ricavi una informazione che nella tua testa sarò poco corrispondente alla realtà.

Nota che ho scritto l'intero post prima di leggere questo tuo ulimo post:

testi molto interessanti ma trattano Arduino dal punto di vista diciamo classico non è C vero è proprio giusto????cominciano a venirmi forti dubbi a questo proposito io avevo capito che arduino aveva una sorta di suo linguaggio che è SIMILE a C....

Ciao.

apprezzo tutto quello che hai scritto e condivido, quello che io cercavo di capire aprendo questo topic era proprio questo partire dall'inizio e cominciare a capirci di più su tutto quello che ci sta alle spalle di arduino e dei micro, in rete ho trovato molto ma quello che mi mancava era diciamo una spinta verso la strada giusta da seguire....

Ho cercato qualche guida o testo che spiegano in dettaglio il funzionamento dei micro avr ma non ho trovato molto per caso mi sapreste indicare dei libri dove posso studiare questi micro?in italiano sarebbero l ideale di inglese sono messo molto male purtroppo

Ci sono vecchio post che possono esserti utili, prova a fare una ricerca nel forum. Proprio oggi ho fatto una ricerca sul forum "Arduino MauroTec" è ho ottenuto una lista di post in cui c'è presente la parola "Arduino" e la parola "MauroTec".

Ho letto un bel pò vecchi post e ho trovato cose interessanti, circa gli interrupt i timer, i fuse byte, lockbit ecc, tutte cose interne al microcontroller ATmega. Poi ci sono discussioni sulla licenza, circa il sistema di build di arduino IDE ecc.

Leggendo i post scritti da me ho notato errori o imprecisioni legate alla mia crescente esperienza con Arduino e gli ATmega in genere, ma nonostante gli errori l'informazione che puoi ricavarne la considero valida sempre se poi approfondita.

Ci sarà sempre un poco di confusione nella tua mente anche perchè gli strumenti software si evolvono e quanto scritto per le versioni vecchio potrebbe non essere più valido per quelle nuove.

Fai delle ricerche sulla rete, cose del tipo: Microprocessori AVR Microcontrollori AVR Architettura AVR Architettura microprocessori e inventane altre di ricerche.

Qualcosa in italiano la troverai come risorsa proveniente da università, ma anche da privati o aziende.

http://forum.arduino.cc/index.php?PHPSESSID=0udof2sa60enrnkf3hf1hbp8e0&topic=101050.0 http://forum.arduino.cc/index.php?topic=107289.0 http://forum.arduino.cc/index.php?PHPSESSID=avne57fl27bt27nhdfpvl0loj3&topic=138134.0 http://forum.arduino.cc/index.php?PHPSESSID=g78j6f90p2ervakl6pienr2i00&topic=165491.15 http://forum.arduino.cc/index.php?topic=115350.0

Comunque l'ho già scritto, l'unica è imparare a leggere l'inglese. Io l'ho dovuto imparare fino al punto in cui non necessito quasi mai del vocabolario/google translate e l'ho imparato principalmente per leggere la documentazione ufficiale dei produttori di dispositivi elettronici. La fonte ufficiale è quella dei rispettivi produttori, tutto ciò che trovi anche libri specie se in italiano non possono coprire ogni dettaglio preso in considerazione nella documentazione ufficiale.

Insomma se non sai leggere l'inglese hai spesso informazioni di seconda mano.

Ciao.

bonde88: Ho cercato qualche guida o testo che spiegano in dettaglio il funzionamento dei micro avr ma non ho trovato molto per caso mi sapreste indicare dei libri dove posso studiare questi micro?in italiano sarebbero l ideale di inglese sono messo molto male purtroppo

Direi per prima cosa il sito Atmel. Ma in inglese. http://www.atmel.com/devices/ATMEGA328P.aspx?tab=documents

Poi alcuni testi come questo (magari faranno traduzione): http://www.amazon.it/Arduino-Internals-Dale-Wheat/dp/1430238828/ref=wl_it_dp_o_pC_nS_nC?ie=UTF8&colid=1R4OS3GC9XX4H&coliid=I4X1CN0WXH43S

bonde88: di inglese sono messo molto male purtroppo

Se non sai l'inglese in questo ambiente non vai da nessuna parte, i datasheet dei componenti sono scritti in inglese, la maggior parte delle guide che trovi su internet è in inglese, tutto il sito di Arduino è scritto in inglese e di materiale ufficiale in italiano c'è solo la guida di Banzi. Ci sono altri volumi in italiano ma sono ben poca cosa rispetto a quello che c'è in inglese. Anche i manuali di programmazione migliori sono in inglese, c'è la traduzione dell'ANSI C in italiano ma alle volte è un pò per così dire "estrosa", anche se la seconda edizione non è malaccio

grazie per le dritte e i link tra questi e un testo in inglese che ho iniziato a leggere spero di arrivare a capire molto di più sui micro avr e tutto il resto grazie ancora.