Array e funzioni

di il
7 risposte

Array e funzioni

Salve,
ho un programma che dovrebbe gestire scrittura e lettura di un componente da un micro tramite l'I2C.
Gestisco l'operazione di lettura di 6 registri con un solo array, definito cosi:
 static uint8_t tmp102_buff_read[7] = {0x01};  
Il valore che vedete è del primo registro, l'avanzamento per i successivi avviene in maniera automatica e quindi non li ho scritti.
Le 6 locazioni successive le uso per scrivere le letture dei 6 registri.

L'intestazione della funzione per leggere:
void tmp102_start_read() {
	i2c_start(TMP102_I2C_DEV, TMP102_I2C_ADDR, tmp102_buff_read,  1, 6, &temperature_comm_ok, &temperature_comm_err);
void i2c_start(uint8_t dev, uint8_t addr, uint8_t *data, unsigned count_write, unsigned count_read,
		volatile bool *notify_ok, volatile bool *notify_err)
L'operazione di lettura:
*trans->data++ = i2c->D;
Dove:

typedef struct {
	uint8_t addr;
	uint8_t *data;
	unsigned count_write, count_read;
	uint8_t state;
	volatile bool *notify_ok, *notify_err;
} i2c_trans;
e D è il registro dell'I2C.

Quando avvio, mi stampa tutti 0 che sarebbe l'inizializzazione dell'array.
E' possibile le varie funzioni non abbiano la visibilità dell'array? Anche se lo definisco volatile non cambia...

7 Risposte

  • Re: Array e funzioni

    Due cose non capisco

    Perchè gli elementi sono 7 e i valori da leggere sono 6 ?

    Cosa c'entra il parametro passato alla funzione (il puntatore data) e il puntatore data nella struttura ? Che relazione c'è tra i due?
  • Re: Array e funzioni

    Se non ricordo male un pacchetto dati I2C bus contiene l'indirizzo del dispositivo nel primo byte; quindi l'inizializzazione di tmp102_buff_read con il valore 0x01 nel primo byte potrebbe indicare che 0x01 è l'indirizzo del chip di destinazione.
    Quindi per prima cosa direi che dovresti verificare bene che gli indirizzi siano corretti sulla tua scheda.
    Poi non ti rimane che armarti di oscilloscopio e verificare quello che succede sulle due linee, clock e dati.
  • Re: Array e funzioni

    Per leggere questo integrato è sufficiente che scrivo l'indirizzo del primo registro e poi automaticamete scorre gli altri.
    Quindi scrivo l'indirizzo del primo registro (0x01) e lascio 6 locazioni libere per i risultati dei 6 registri che devo leggere.
    7= 1 (registro) + 6 (locazioni per la lettura) e nella funzione setto 1 scrittura e 6 letture...

    Alla funzione gli passo il puntatore perchè in C non si possono passare gli array (se non sbaglio), quello della struttura è sempre lo stesso mi riassume i parametri...
  • Re: Array e funzioni

    Non ho capito la seconda risposta .... puoi mostrare il contenuto della funzione ?
  • Re: Array e funzioni

    I tuoi post omettono numerosi dettagli essenziali, senza i quali le speranze di ottenere un aiuto risolutivo si assottigliano.

    Poiché è facilmente presumibile che tu non stia operando sotto il vincolo del segreto militare alla progettazione e messa a punto della prossima generazione di sistemi di controllo Raytheon, GE, Bombardier o McLaughlin, inizia con lo specificare nei minimi dettagli:

    1) Board di sviluppo, MCU, device impiegati;

    2) Ambiente di sviluppo, versione del compilatore, accessibilità dei sorgenti di libreria;

    3) Tue capacità di analisi avanzata: lettura dell'output Assembly e binario, analisi dei segnali digitali, uso di emulatore hardware.

    4) Pubblica una quantità di codice sufficiente, almeno in teoria, a compilare e riprodurre il problema.

    Altrimenti qui rischiamo di produrre dei thread chilometrici a caccia di ectoplasmi.
  • Re: Array e funzioni

    Hahaah sì hai ragione solo che non volevo riempire di codice fammici ripensare un pò su....
  • Re: Array e funzioni

    Comincia a proporre il codice della funzione, se vuoi un aiuto ...
Devi accedere o registrarti per scrivere nel forum
7 risposte