Salve a tutti,
essendo io neofita (al massimo 2 settimane di autoapprendimento!) in programmazione C (e quindi di Arduino) ma avendo fatto uso di altri MCU con programmazione BASIC e derivati (Basicx Bx24 prima, e PICAXE poi) la mia domanda riguarda come sarebbe preferibile organizzare un programma in C di ARDUINO, mi spiego meglio:
Nei PICAXE, per razionalizzare il programma, lo suddivido in diversi "sub programmi" chiamati da una Label, in mancanza di routine particolari alla fine di ogni sub, il flusso del programma continua in modo sequenziale, a meno di non bloccarlo con qualche comando, se mi serve chiamare o spostare il flusso verso una sub particolare, semplicemente la chiamo con un "goto" (se non deve tornare) o con un "gosub" (se deve tornare alla routine che lo ha invocato. Se viene ben impostato, è molto utile per creare un certo ordine che servirà in secondo momento quando si ritornerà per apportare modifiche.
Adesso, la mia domanda è, visto che in C esiste una parte del codice rinchiusa dentro una "sub" (o pseudo tale, chiamata Function giusto?) ovvero la: void loop() quindi non è necessario fare goto main come si fa usualmente con i picaxe. ho ben capito che se metto tutto dentro questa Function eseguirà all'infinito il programma. Fin qui tutto ok, ma per programmi più complessi, devo creare delle alte functions (sub programmi) che le invoco cosi: nomefunction(); questo è l'equivalente di un "gosub" perché una volta terminato la Function invocata, il flusso del programma ritorna di nuovo al punto dove è stato invocato, e fin qui, nessun problema.
La mia domanda è cosa sia più corretto fare per dare al programma un flusso corretto e veloce, vi faccio degli esempi perchè non so spiegarlo a parole:
Caso 1:
void loop(){
comando 1;//esegue qualsiasi cosa...
comando 2;
comando 3;
AltraSub();//chiama una function...
}
void AlraSub(){
comando 4;
comando 5;
}
Caso 2:
void loop(){
Sub1();
Sub2();
Sub3();
Comando 4;
Comando 5;
}
Sub1(){ ... }
Sub2(){ ... }
Sub3(){ ... }
ecc...
spero di essere stato abbastanza chiaro, nel primo caso, il flusso del programma e in gran parte contenuto dentro "loop" con una chiamata ad una routine esterna a loop, finita questa, il flusso ritorna al punto dove è stata chiamata.
Nel secondo caso, nel "loop" vi sono solo le chiamate alle varie Functions o sub ogni volta che una di queste functions ha terminato ,il flusso ritorna al punto dove è stato invocando e continua al prossimo comando.
Dal punto di vista strutturale , io da profano direi che poco o niente cambia, ma non so se è così, attualmente io vedo più eficiente il caso 2 ma non vorrei che facendo così andassi a peggiorare le prestazioni di esecuzione, specialmente considerando che ho intenzione di imparare al meglio e tentare di realizzare dei progetti abbastanza complessi e non vorrei creare dei "mostri" che non rendono al meglio, già adesso tento di meccanizzare le cose ripetitive con l'uso estensivo di cicli FOR per esempio, ma c'è tanto ancora da imparare!!!
A voi esperti la parola!!
Colgo l'occasione per augurarvi UN PROSPERO ANNO NUOVO!!
Antonio