Problema con variabile globale (linguaggio C)

di il
2 risposte

Problema con variabile globale (linguaggio C)

Ciao a tutti, vi scrivo per chiedervi aiuto riguardo un codice scritto in C per microcontrollori freescale.
il mio codice è il seguente:

	if(my_flag_scan == 1)
	{
	my_flag_scan = 0;
	responseScanConfig[0] = INIZIO_MSG;
	responseScanConfig[1] = AQUISITION_MSG_CODE;

	for(channel = 0; channel< CHANNELS_NUMBER; channel++)
		{
			temp_.number = (unsigned short)(rssi_value_matrix_med[channel]);
			responseScanConfig[2+(2*channel)] = temp_.byte[0];
			responseScanConfig[3+(2*channel)] = temp_.byte[1];
		}
	responseScanConfig[34] = 0;
	responseScanConfig[35] = 0;
	responseScanConfig[36] = LSB(best_channel_glob);
	responseScanConfig[37] = MSB(best_channel_glob);
	responseScanConfig[38] = 0;
	responseScanConfig[39] = 0;
	responseScanConfig[40] = FINE_MSG;

	error = USB_DeviceCdcAcmSend(s_cdcVcom.cdcAcmHandle, USB_CDC_VCOM_BULK_IN_ENDPOINT, responseScanConfig, 41);

		if (error != kStatus_USB_Success)
		{
			/* Failure to send Data Handling code here */
			usb_echo("Error...\r\n");
		}
	}

In pratica in questo codice copio dei dati nel vettore responseScanConfig[] per trasferirli via usb. Tali dati li visualizzo per mezzo di un piccolo software ( che sto usando per questioni di debug)
Il vettore rssi_value_matrix_med[channel] è un vettore di double dichiarato in un file .h, con modificatore "extern" il cui valore lo assegno in un file .c diverso da questo del codice che vi ho postato.
Il cast l'ho fatto perché trasferisco degli unsigned short.
Fin qui tutto bene. il problema invece nasce quando al posto di rssi_value_matrix_med uso un array di unsigned short.
L'array di unsigned short, è dichiarato nello stesso file .h e i valori vengono assegnati nello stesso file .c ma ho errori. Il che mi sembra quasi assurdo visto che i dati sono uguali. L'unico modo che ho per vedere qualcosa è fare un'operazione, ad esempio un prodotto per 10. In questo modo, se prima di copiare i valori in responseScanConfig faccio un prodotto( o anche una divisione) allora riesco a visualizzare il dato corretto e moltiplicato (o diviso).

Vi giuro che questa cosa mi sta facendo usicre di senno.
Avete qualche suggerimento da darmi?

Grazie
salutoni

2 Risposte

  • Re: Problema con variabile globale (linguaggio C)

    Se non ho capito male, ha un file .c che riempie il vettore rssi_value_matrix_med, quindi hai questo file qui che ne usa il contenuto.
    Gli errori (di lettura dati) avvengono quando usi un array non di double, ma di ushort.
    Nulla ci dici sull'ambiente di compilazione, né se ti compaiono dei warning.
    Potrebbe essere di tutto, da un baco del compilatore, ad un errore di linking, ad un tuo errore di programmazione nel file .c che non ci hai mostrato... Il tuo ucontrollore (di cui non indichi le caratteristiche) potrebbe essere posseduto... Le cavallette!!! (cit)...
  • Re: Problema con variabile globale (linguaggio C)

    Ciao Andrea, a dire il vero non sapevo dove sbattere la testa e credevo che quello che ho scritto fosse sufficiente.
    Comunque in realtà avevo dei problemi con dei risultati ed ero completamente fuori pista: il problema l'ho risolto agendo su altri aspetti del codice mentre ero prima convinto che i miei problemi provenissero da questa variabile globale!

    Scusate

    A presto e grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte