Salve a tutti sono un neofita,
ho un programma di un micro che legge un sensore di temperatura.
Nel main() per stamapre i dati chiama:
t = tmp102_get();
...dopo t viene stampato con printf...
Nel file sorgente tmp102.c ho:
uint16_t tmp102_get() {
return ((((uint16_t)tmp102_buff[0]) << 8) + tmp102_buff[1]) >> 4;
}
static uint8_t tmp102_buff[2];
void tmp102_start_read() {
i2c_start(TMP102_I2C_DEV, TMP102_I2C_ADDR, tmp102_buff, 0, 2, &temperature_comm_ok, &temperature_comm_err);
}
Quest'ultima chiama i2c_start in i2c.c (un altro file sorgente) la cui intestazione è:
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)
typedef struct {
uint8_t addr;
uint8_t *data;
unsigned count_write, count_read;
uint8_t state;
volatile bool *notify_ok, *notify_err;
} i2c_trans;
Nello switch per la gestione delle interrupt ho:
*trans->data++ = i2c->D;
D è il registro dell'i2c che è impiegato per il I/O di dati.
La domanda è come fa tmp102_buff[2] ad avere lo stesso valore di data?
La struttuara compare in un file sorgente diverso dall'altro però hanno una libreria in comune i2c.h
void i2c_enable(uint8_t dev);
void i2c_disable(uint8_t dev);
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);
E' tramite questa libreria?