allora, se trasformi tutto in secondi (o in ore) poi hai lo stesso problema della millis(), ovvero prima o poi un overflow (dipende dalla dimensione della variabile), anche se usando unsigned long con i secondi è molto più raro che usando solo i millesimi come la millis()
In realtà il problema overflow ce l'ha anche l'RTC, ma si presenta dopo anni, se non millenni. (dipende dalla dimensione massima della varibile "anno" all'interno dell'rtc)
Per utilizzare tutta la precisione possibile, il metodo è creare un array (o meglio una classe) che nelle sue celle contiene anno, mese, giorno, ora, minuti, secondi
il confronto a questo punto diventa un poco più complicato, conviene usare una funzione, o nel caso di una classe un metodo pubblico
(non ti dico ogni volta il prof cosa dicono alla traduzione return = ritornare smiley-razz)
beh il mio diceva sfrugulate l'array... eppure si capiva cosa bisognava fare. Per esempio in questo caso nella funzione devi sfrugulare con gli array, ovvero farne una copia dell'array contenente il tempo memorizzato (in questo caso tempoA), sommarci il valore(differenza), normalizzarlo (finché i secondi sono > 60 allora secondi -=60 e incrementare di 1 i minuti, etc..), e controllare se è più grande dell'array appena letto dall'RTC...
et voilà, hai un sistema per contare il tempo che andrà in overflow molto dopo la nostra departura dal mondo terreno 8)
ps. prima scrivi il codice funzionante, POI ottimizzalo con uint_8 e tutto quello che vuoi. Altrimenti non capirai mai se è il principio o l'ottimizzazione ad essere errata...
@superlol: l'interrupt ogni secondo è necessario solo se il loop dura più di un secondo o una sua frazione molto grossa. Ma salvo delay o codice astruso, il loop() non dura più di qualche millisecondo. Senza contare che all'interno dell'interrupt non puoi fare chiamate a funzioni esterne, quindi niente interrogazioni all'RTC, nel caso ce ne fosse il bisogno