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 ?
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();
Guglielmo
P.S.: Ma ripeto ... è veramente solo per una questione magari di leggibilità e di chiarezza ...