Probliema lettura interrupt

di il
3 risposte

Probliema lettura interrupt

Salve a tutti,
sto cercando di leggere un GPS.
Main:
#define STDIO_UART1
volatile bool contr_GPS = false;
volatile char GPS_buff[3000];
volatile int i=0;

#ifdef STDIO_UART1
	// enable GPS connector to be used as external UART connection
	PTC->PSOR = (1u << 1);
	uart_enable(1, 9600, false, true);
	printf("ready.\r\n");
#endif
for(;;)
	{
	if (contr_GPS)
	  {

		for (int i=0; ;i++)
				printf("%c", GPS_buff[i]);
	  }
}
Per quanto riguarda il funzionamento dell'interrupt è:
extern volatile char GPS_buff[];
volatile char *data=GPS_buff;
volatile bool contr_write = true;
extern volatile bool contr_GPS;
extern volatile int i;

static void process_irq(uint8_t dev) {
	UART_Type *uart = uart_reg[dev];
	//UART_Trans *buffer;
	if (uart->S1 & UART_S1_TDRE_MASK) {
		// NON C'E' NULLA PERCHE' TEORICAMENTE DOVREBBE DARE QUALCUSA DI DEFAULT
		}

	if (uart->S1 & UART_S1_RDRF_MASK) {
		if (i<3000){
			*data++ = uart->D;
			i++;
			}
		else
		{
		uart->C2 &= ~UART_C2_RIE_MASK;
		uart->C2 &= ~UART_C2_RE_MASK;
		contr_GPS = true;
		}
	}
}

Se tolgo contr_GPS e stampo a random qualcosa esce ma sono simboli senza senso..esempio:
çm‚t?À"6½UùÄuG0?¾m8ëWÞÑæ+› W®ÝU⇂¦ùõ[‚ˆÞÓÙú
hŽ$:bQŸˆZø”×Å·§ºö†Ñ ß§Äº6Ë¢aÜ÷Á‚–¡Ê°ú-^J¤†Æ÷ÓÇHå ÂîÑÍ7ØU¤½ü%Œ\ä¼0ñ­¢›Ýº–ù9Têæ y÷Ÿ£

Se lascio la condizione contr_GPS non stampa nulla.

Avete dei consigli o suggerimenti per capire l'errore?

Grazie

3 Risposte

  • Re: Probliema lettura interrupt

    Ma di quale sistema di sviluppo parliamo?

    La variabile i nel ciclo for è senza alcun controllo ... che senso ha?
  • Re: Probliema lettura interrupt

    Per compilare uso un Kinetis Design Studio, current toolchain: Cross ARM GCC, Current builder: Gnu Make Builder.
    Micro MK10 freescale, GPS UP501 Fastrax.

    Il ciclo non da erro pensavo che poteva andare lo stesso... continuerà e poi blocco io...comunque si ho messo il controllo e non va... ho cambiato anche la lettera nel for per sicurezza...
  • Re: Probliema lettura interrupt

    Quello che ti ho segnalato può non essere la causa del malfunzionamento ma sicuramente è un errore grave. Se il buffer è di 3000 caratteri, l'indice non può superare 2999.
Devi accedere o registrarti per scrivere nel forum
3 risposte