Salve a tutti,
ho scritto un programmino in C per andare a leggere un integrato GPS.
L'integrato qualcosa stampa ma perdo dei caratteri. Il prof. mi ha detto che probabilmente è dovuto alla differenza di velocità tra l'integrato e la stampa del compilatore suggerendomi di aggiungere un banale buffer.
Questa di seguito è la gestione degli interrupt relativo alla parte di lettura.
#define size (100)
static char GPS_buff[size];
volatile char *data=GPS_buff;
extern volatile bool contr_GPS;
int i=0;
int a=100;
static void process_irq(uint8_t dev) {
UART_Type *uart = uart_reg[dev];
if (uart->S1 & UART_S1_RDRF_MASK) { //seconda parte che gestisce la lettura
//(void)uart->D;
if(a--)
{
*data++ = uart->D;
//printf("%c", GPS_buff[i]);
}
else
{
uart->C2 &= ~UART_C2_RIE_MASK;
contr_GPS = true;
//print_data();
}
//printf("%c",uart->D);
}
}
La funzione stampa presente nel medesimo file:
void print_data()
{
for (int j=0; j<size; j++)
printf("%c", GPS_buff[j]);
/*
{if (j%100)
printf("%c", GPS_buff[j]);
else {
printf("\r\n");
printf("%c", GPS_buff[j]);
}
}
*/
}
In un altro file ho il main con:
volatile bool contr_GPS = false;
if (contr_GPS) print_data();
Facendo diverse prove spostando 'printf' mi sono accorto che stampa solo dall'interno dell'interrup ma se l'avvio con il buffer no.
Il compilatore non segna errori.
Che c'è? Avete da suggerirmi altri modi per gestire il buffer?
Grazie per ogni aiuto