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...