Si puo trattare Void(setup) come una normale routine ?

Forse e' una domanda stupida, mi spiego meglio ... poniamo che per qualche ragione io debba avere uno stato iniziale particolare, e quindi nel void(setup) ci debba mettere parecchie istruzioni che definiscono valori, variabili, contatori, ecc ... e poniamo che durante il normale svolgimento dello sketch, se si verifica una precisa condizione, debba "ripartire da zero" reimpostando tutte quelle variabili, valori ecc esattamente come allo stato iniziale ... se fossero tante, scrivere una seconda funzione, chiamiamola void(reset) o qualsiasi altro nome, da richiamare in quel caso, mi porterebbe via ulteriore memoria, e se le istruzioni fossero parecchie, anche la memoria consumata potrebbe diventare parecchia ...

Cosa succederebbe se invece, al verificarsi di quella condizione, mi limitassi a richiamare la void(setup) come se fosse una normale funzione ? ... il compilatore ed il micro lo permettono, o andrebbe tutto in palla ?

la void setup() { ... } è una normale funzione che puoi richiamare quando e dove ti pare ...

Del resto il main(), che l'IDE ti nasconde, la chiama prima di iniziare a chiamare a raffica la loop() ... come puoi ben vedere :

int main(void)
{
init();

initVariant();

#if defined(USBCON)
USBDevice.attach();
#endif

setup();
   
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}

return 0;
}

Guglielmo

Grazie ... era un dubbio che mi era venuto pensando che la funzione setup potesse essere "riservata" e richiamata solo dal main ... meglio cosi :wink:

Se proprio vuoi fare una cosa che sia chiara e che NON richiami all'interno del loop() la setup() ...

... puoi semplicemente mettere tutta la fase di inizializzazione, che magari va ripetuta in una TUA funzione, es. "void miaInizializzazione() { .... }" e poi sia nel setup() che dove ti serve, semplicemente chiamare miaInizializzazione(); :wink:

Guglielmo

P.S.: Ma ripeto ... è veramente solo per una questione magari di leggibilità e di chiarezza ... :slight_smile: