Visibilità funzioni

di il
1 risposte

Visibilità funzioni

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?

1 Risposte

  • Re: Visibilità funzioni

    E' molto probabile che quando richiami i2c_start() il puntatore al buffer che passi (il tuo tmp102_buff) venga internamente salvato e utilizzato per tramite del puntatore *trans->data.
    Ad ogni modo ti consiglio, dipendentemente dalla complessità del micro, di provare a scrivere le tue "librerie" per l'accesso all'I2C bus
Devi accedere o registrarti per scrivere nel forum
1 risposte