Go Down

Topic: Tab Multiple (Read 10070 times) previous topic - next topic

gpb01


Devo seguire il consiglio di Guglielmo?


... puoi anche non seguirlo, ma tanto se non metti gli include nel .ino non ne esci ...  ]:D ]:D ]:D

Guglielmo
Search is Your friend ... or I am Your enemy !

f.schiano

ahahahah,  non intendevo dire che non volevo seguire il tuo consiglio. Ma volevo sapere se era quella la soluzione al mio problema precedente. :)

Grazie mille per l´aiuto .
Appena posso modifico il codice per averne uno piú pulito . Poi lo riposto cosí se avete tempo e vedete dei MACRO-ORRORI come mi ha fatto notare astrobeed continuo a fixarlo :) !

Grazie davvero,
scappo al mio corso di tedesco, a stasera!

gpb01

... comunque .. mettere le include risolve una parte dei problemi ... poi saltano fuori altri errori nel codice degli altri pezzi ...  :smiley-roll:

Dovrai fare un po' di correzioni ... ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

leo72

Tutto questo si può riassumere così:
l'IDE di Arduino non è fatto per strutturare il codice in questo modo  ;)

astrobeed


l'IDE di Arduino non è fatto per strutturare il codice in questo modo  ;)


Il modo di Fabrizio è sbagliato/incasinato a prescindere dall'IDE di Arduino, pure scrivendo il codice in C/C++, senza wiring, nel modo in cui l'ha strutturato il compilatore gli fa lo stesso le pernacchie  :)
Scientia potentia est

leo72

Non ho guardato il suo archivio... non mi permetto di commentare una cosa che non ho visto, per cui parlo solo delle "tab" dell'IDE. che più che tab multifile sono solo "rate" del programma principale  ;)

f.schiano

Astro ha completamente ragione. Il mio codice é incasinatissimo . Purtroppo come ho detto non sono un esperto di C .

Penso che la cosa migliore sará scrivere direttamente il tutto sotto forma di libreria. Che ne pensate?

Con il file .h seguendo le istruzioni di astro e il file cpp con le implementazioni delle funzioni.

Fab.

f.schiano

#37
Dec 04, 2013, 09:22 am Last Edit: Dec 04, 2013, 09:29 am by f.schiano Reason: 1
Ho provato, probabilmente non nel modo giusto, a fare quello che mi ha detto astro e ho messo l´inizializzazione delle variabili che mi servono in una funzione:

initialize_sys(){.........}

nella void setup() come prima istruzione ci metto:

initialize_sys();

Ma poi se cerco di usare una variabile come "BaudRate" che sta nella mia funzione initialize_sys(){... BaudRate=115200;}

Il compilatore mi dice che la variabile non é definita.

EDIT:
Sto dando un´occhiata a questo:

http://arduino.cc/en/Hacking/LibraryTutorial

Penso che leggendo questa pagina riesco a risolvere. :)

astrobeed


Ma poi se cerco di usare una variabile come "BaudRate" che sta nella mia funzione initialize_sys(){... BaudRate=115200;}


Premesso che per il baud rate sarebbe meglio usare una #define, così non sprechi ram, però se le variabili non le dichiari come globali non le vedrai mai all'interno di altre funzioni.
Scientia potentia est

f.schiano

ok ma quindi tornando al concetto di libreria, per definire queste variabili globali e NON dovendo inserirle nel file .h , devo inserirle semplicemente nel file .cpp al di fuori di una funzione e non all´interno della funzione initialize_system() ?


astrobeed


ok ma quindi tornando al concetto di libreria, per definire queste variabili globali e NON dovendo inserirle nel file .h , devo inserirle semplicemente nel file .cpp al di fuori di una funzione e non all´interno della funzione initialize_system() ?


Tutte le variabili definite al di fuori di una funzione sono globali, se definite in un file diverso da quello in cui vengono utilizzate è necessario inserirle nell'header come "extern".
Esempio nel file "a.c", o .cpp, definisci come globale "int variabile", per poterla utilizzare nel file "b.c" devi dichiararla, nel header, come "extern int variabile".

Scientia potentia est

f.schiano

Ok. Ma allora cosa c´entra la funzione initialize_sys() ?

Non posso utilizzare una funzione per dichiarare delle variabili? Io in matlab lo faccio senza problemi richiamando una certa funzione ogni volta che apro un file. In C/C++ non c´é una cosa del genere?

astrobeed


Ok. Ma allora cosa c´entra la funzione initialize_sys() ?


Ti serve per caricare i valori iniziali nelle variabili e per settare opportunamente l'ambiente di funzionamento se necessario, ovviamente stiamo parlando di programmazione C/C++ fatta in modo corretto, nonché portatile, e non dell'ambiente distorto di wiring :)
Se impari a programmare correttamente in C/C++ , ignorando le facilitazioni di wiring, hai solo da guadagnarci.
Se scrivi un programma in C/C++ in modo corretto è molto semplice trasportarlo (porting) su altra piattaforma, dovrai sistemare solo la parte di interfaccia diretta con l'hardware perché sicuramente diversa tra i vari micro, il codice di Arduino gira solo su Arduino, ovvero solo per i pochi processori supportati, il che è un grosso limite.
Scientia potentia est

f.schiano

Ok. Questo mi é chiaro.

Io vorrei un codice il piú pulito possibile che sia pulito a un osservatore C.

Il mio obiettivo é dichiarare ed inizializzare delle variabili, é meglio fare il tutto dove sta il setup() oppure da qualche altra parte.

Vorrei utilizzare il concetto di libreria che mi sembrava adatto allo scopo ma mi sembra di non aver capito bene come funziona.

Ho creato 2 file:

Degreen.h e Degreen.cpp

Te li allego cosí forse ci capiamo meglio.

astrobeed


Vorrei utilizzare il concetto di libreria che mi sembrava adatto allo scopo ma mi sembra di non aver capito bene come funziona.


Il mondo Arduino fornisce un concetto distorto di libreria, intanto tocca vedere se parliamo di C o C++, su i micro a otto bit il C++ è il male assoluto perché sciupone di risorse e porta facilmente ad errori "strani" dato che consente di riallocare la memoria con troppa disinvoltura, cosa che non è un problema su un pc dove di ram ne hai a tonnellate e ci sono meccanismi che la rilasciano in automatico quando non più utilizzata.
In C una libreria è semplicemente una raccolta di funzione, più o meno complesse, mirate alla soluzione di un problema specifico, p.e. la gestione di un sensore, tipicamente una libreria è composta da uno, o più, file .c e un singolo file .h generale, quello che va incluso negli altri file del programma, ed eventualmente altri file .h abbinati ai vari file .c, come devono essere usati è gestito dal file .h principale.
In C++ una libreria è un insieme di funzioni e/o di classi, stessa struttura della libreria C.
Una enorme differenza tra il C e il C++ è che il primo consente di sapere al momento della compilazione l'esatto impegno di RAM, il che impedisce eventuali errori run time  out of ram o straripamenti del heap space/stack..
Nel C++ puoi sapere solo l'impegno statico della RAM, dato che  il C++ ti permette di creare oggetti con dimensioni variabili a piacere in modo dinamico, p.e. una "string", diventa possibile andare in out of ram o far straripare l'heap/stack mentre il programma gira, per non parlare del fatto che l'implementazione C++ di avrgcc è soggetta a svariati limiti.
Scientia potentia est

Go Up