Go Down

Topic: Libreria uLCD 4D - aiuto per non blocking code (Read 113 times) previous topic - next topic

MatrixGTI

Ciao a tutti,
Sto usando da qualche tempo un display LCD touch 7" della 4D System , la versione gen4-ulcd-70DT , pilotato da un Arduino Mega , Il display e la relativa libreria di gestione funzionano bene finchè la comunicazione con il display è perfetta, se pero' per qualche ragione il display non risponde ( ad esempio togliendo alimentazione per un istante al solo display) la libreria entra in un loop che lagga il restante codice e anche se la comunicazione viene ripristinata e il display di nuovo resettato tramite il pin di reset questo lag permane.
Modificando il parametro Timeout nella libreria da 500 ms a 50 ms questo lag diminuisce ovviamente ma dopo circa 4 secondi che il display non risponde ho addirittura un inaspettato reset del micro a volte.

la parte di libreria ( genieArduino ) che suppongo causi il problema è:

Code: [Select]
///////////////// Genie::FlushSerialInput ///////////////////
//
// Removes and discards all characters from the currently
// used serial port's Rx buffer.
//
void Genie::FlushSerialInput(void) {
    while (deviceSerial->read() >= 0);
}

/////////////////////// Resync //////////////////////////
//
// This function does nothing for RESYNC_PERIOD to allow the display
// time to stop talking, then it flushes everything so the link
// can start again.
//
// Untested, will need work I'm sure.
//
void Genie::Resync (void) {
    //for (long timeout = millis() + RESYNC_PERIOD ; millis() < timeout;) {};
    FlushSerialInput();
    FlushEventQueue();
    Timeouts = 0;
    linkCount = 0;
    LinkState = &LinkStates[0];
    *LinkState = GENIE_LINK_IDLE;
}


Si accetta qualsiasi suggerimento  :smiley-lol:

Go Up