Buonasera amici e amiche,
quello che vi vorrei chiedere è a proposito delle funzioni di callback.
Per inviare un byte su UART con un'architettura tipo PIC18 si può usare una funzione come la seguente (l'ho scritta io ma funziona):
void UartSendChar(char data)
{
while (!PIR1bits.TXIF){continue;} /*Aspetto fino a che TXREG non è vuoto*/
TXREG = data;
}
Tuttavia questa funzione è bloccante, nel senso che fintanto che TXIF non va a 1, il programma è bloccato. Quindi, ad esempio, in caso di errore, senza watchdog attivo, si potrebbero avere problemi.
Per evitare ciò, vorrei usare questa fantomatica "callback" che in un certo senso, se non ho capito male a causa della mia ignoranza, dovrebbe risolvere il problema.
So che una callback è sostanzialmente un puntatore a funzione.
OK, ma a chi lo devo dare questo puntatore? Ad una ISR.
OK, ma come glielo passo? E qui mi casca l'asino, non so come!
Io vorrei capire come fare a passare "la callback all'ISR" e quindi come usarla.
Quello che vorrei ottenere è un codice nel quale una volta che viene invocata la
non si blocca niente, anzi il programma prosegue con l'istruzione successiva e via così. Intanto, "in remoto", cioè tramite una ISR nascosta all'utente, viene inviato il mio byte. Poi alla fine dell'invio, questa callback ritorna comunicando che il byte è stato inviato o meno.
Non so se mi sono spiegato e se ho detto tutto correttamente.
In ogni caso, se non altro per aver letto tutto, vi ringrazio anticipatamente.
Elia