Go Down

Topic: Multitasking Arduino utilizzo di millis - Aiuto (Read 3495 times) previous topic - next topic

Ivan_Isk

Mi sbagliavo..
anche solo includendo le librerie non funziona più. ..
HELLO WORLD!

leo72

La funzione F() permette di leggere le stringhe dalla memoria Flash.
I microcontrollori sono ad architettura Harvard, ciò significa che la memoria che contiene il programma (la Flash su cui scrivi lo sketch) è separata dalla memoria che contiene i dati creati dal programma stesso (la RAM in cui vengono messe le variabili).
Senza precisare diversamente, la CPU preleva i dati sempre dalla RAM per cui il compilatore, quando trova una stringa, la salva sì in Flash (come parte del programma) ma durante l'esecuzione la copia in RAM. Se hai molte stringhe, i 2K di RAM dell'Atmega si saturano velocemente, essendoci in RAM anche tutte le altre variabili create dal codice nonché lo stack e l'heap.
Grazie alla funzione F() si istruisce il compilatore affinché legga le stringhe direttamente dalla Flash, saltando la loro copia in RAM. Il consumo di RAM cala quindi drasticamente.

Tornando a noi,
Quote
è l'unico dispositivo i2c collegato ad arduino e il codice di esempio funziona..

ma l'indirizzo del driver che gestisce il display è 0x27 oppure no? Se non è il suo indirizzo, la libreria non lo trova sul bus I2C.

Ivan_Isk

Grazie per la spiegazione! :)
Si, l'indirizzo è 0x27, infatti con il codice di esempio funziona tutto come dovrebbe...
HELLO WORLD!

leo72

Ma il display da solo, senza le altre lib nello sketch, ti funziona, quindi?
Se è così, potrebbe darsi che ci sia qualche incompatibilità fra libreria io che quelle usate saturino comunque la memoria.

Compilandolo con l'IDE 1.5.7, il compilatore alla fine riporta non solo l'uso della Flash ma anche quello (statico) della RAM. Provando lì, che numeri leggi?

Go Up