leOS - un semplice OS per schedulare piccoli task

leo72:

d407336:
il mio problema è che devo aggiornare un display lcd, e lo vorrei fare non più velocemente di ogni secondo, perchè se no non si leggerebbe bene e non mi serve istantaneamente vedere le variazioni.
farò con il metodo blinkwithoutdelay, è una buona idea secondo te?

Secondo me la soluzione più semplice è quella di crearsi un buffer video e poi di riversare ogni xxx ms tale buffer sul display.
Cos'è un buffer video? E' una memoria tampone usata per scrivere le informazioni che poi devono essere visualizzate. Chi ha usato un Commodore ai tempi degli anni '80 sa di cosa parlo: lì esisteva una parte della RAM riservata alla memoria video suddivisa in 1024 byte per i dati e 1024 byte per gli attributi colore. L'utente poteva scrivere direttamente in quel buffer, era compito del chip video generare l'immagine video da spedire alla TV per la visualizzazione.
Tu puoi fare così, simulando appunto un buffer video in cui scrivi le tue informazioni.

Aggiungerei che nei sistemi moderni si usa un sistema a doppio buffer, uno si usa per disegnare e l'altro è quello che si manda al video. In questo modo piuttosto che inviare al video un'immagine mezza disegnata, si invia l'ultima immagine completa. Quando il buffer di disegno è completato, si mette il buffer di disegno nel buffer video e si può ricominciare a disegnare (in realtà la cosa si usa anche per semplificare un po' la gestione dei lock, normalmente il buffer video sulla scheda video, ed ad arginare eventuali picchi di "non cpu") .
Però se ho ben capito gli LCD possiedono questo buffer di disegno internamente, nel senso che se non ricevono nessun aggiornamento stampano l'ultima cosa inviata, ma non è il caso di TV e monitor