Page 1 of 1

errore compilatore

Posted: Sat May 18, 2013 5:51 pm
by topogigio
Salve a tutti,
ho quasi finito di sviluppare un driver per LCD HY28A-LCDB che utilizza ILI9320 per l'LCD e l'ADS7843 per il Touch Panel;
eseguendo la routine di seguito durante il runtime l'ultima istruzione che esegue è la prima printf...
compilo con:
gcc -o spi -l rt main.c -l bcm2835 -l m -mfloat-abi=hard -Wall

Code: Select all

FunctionalState getDisplayPoint(Coordinate * displayPtr, Coordinate * screenPtr, Matrix * matrixPtr )
{
    FunctionalState retTHRESHOLD = ENABLE ;
    long double an, bn, cn, dn, en, fn, sx, sy, md;

    printf("before the printf...\n");
-----------> fino a qui! anche se commento la printf 
    printf("a %Lf - b %Lf - c %Lf - d %Lf - e %Lf - f %Lf --- x %d - y %d - m %Lf",matrixPtr->An,matrixPtr->Bn,matrixPtr->Cn,matrixPtr->Dn,mat$

    an = (long double)matrixPtr->An;
    bn = (long double)matrixPtr->Bn;
    cn = (long double)matrixPtr->Cn;
    dn = (long double)matrixPtr->Dn;
    en = (long double)matrixPtr->En;
    fn = (long double)matrixPtr->Fn;

    sx = (long double)screenPtr->x;
    sy = (long double)screenPtr->y;
    md = (long double)matrixPtr->Divider;

//    printf("a %f - b %f - c %f - d %f - e %f - f %f --- x %f - y %f - m %f",an,bn,cn,dn,en,fn,sx,sy,md);

    if( matrixPtr->Divider != 0 )
    {
        /* XD = AX+BY+C */
        displayPtr->x = (unsigned short)( (an * sx) + (bn * sy) + cn) / md;
        /* YD = DX+EY+F */
        displayPtr->y = (unsigned short)( (dn * sx) + (en * sy) + fn) / md;
    }
    else
    {
       retTHRESHOLD = DISABLE;
    }
    return(retTHRESHOLD);
}
forse aggiornando gcc alla 4.8...
Aiutoooooo...

Re: errore compilatore

Posted: Sat May 18, 2013 10:44 pm
by Wick
Ciao,
ma nella funzione che hai allegato il secondo printf è troncato? Riesci a passarci un esempio autonomo che possiamo compilare? Basterebbe fornirci le definizioni delle strutture!

Tra qualche settimana avrei dovuto scrivere anch'io un driver per quel display.. :D

Re: errore compilatore

Posted: Sat May 18, 2013 11:04 pm
by topogigio
Ora sto col cellulare lunedì posto il codice corretto o do il link alla pagina google code.
Il driver funziona solo da software dedicato, per scelta.
Notte

Re: errore compilatore

Posted: Sun May 19, 2013 6:59 am
by macca
Aggiungi un \n alla printf che non visualizza. L'output è bufferato e il display visualizza solo dopo un \n oppure quando il buffer è pieno (oppure quando termina il programma, anche se a volte mi è capitato che non lo facesse).
Si può anche disabilitare il buffer se ti serve un output immediato.

Re: errore compilatore

Posted: Sun May 19, 2013 2:14 pm
by topogigio
Ho verificato il problema dipende dai puntatori (ho verificato nessuno punta null). Alla fine invece di passare i puntatori ho creato delle variabili globali statiche; ora funziona tutto. Odio le variabili globali, e vorrei sistemare... È un problema di gcc sicuramente, vorrei aggiornare alla versione 4.8 ma non so dove trovarla.

Re: errore compilatore

Posted: Thu May 23, 2013 8:29 pm
by topogigio
ciao macca
qui trovi il codice completo così puoi controllare quanto dico ;) approposito dellla routine

https://github.com/topogigio/HY28A-LCDB-Drivers

il driver funziona tutto sia dell'LCD che del Touch

Buon divertimento...

Re: errore compilatore

Posted: Fri May 24, 2013 6:57 am
by macca
Beh grazie, ma non avendo un LCD di quel tipo non posso farci niente (o dovrei vedere qualcosa anche senza ?). Evidentemente avevo anche capito male il problema, credevo che fosse l'output ma chiaramente era qualcos'altro.
Da quello che vedo, comunque, fai un po' di mix tra matrix e matrixPtr, il che non è molto bello. Inoltre non mi sembra di vedere dove le variabili vengono inizializzate.

Re: errore compilatore

Posted: Fri May 24, 2013 7:09 am
by topogigio
Di fatto, avevo capito che avessi un LCD come il mio :) comunque ho lasciato solo le definizioni dei puntatori nella chiamata alla funzione, che di fatto non vengono usati. La funzione utilizza solo le variabili globali, altrimenti come trova l'assegnazione di un puntatore, esce senza dire nulla!!!

Re: errore compilatore

Posted: Fri May 24, 2013 8:44 am
by macca
Ah scusa per la confusione.

Riguardo ai puntatori, se ti riferisci a getDisplayPoint, il puntatore viene usato alla riga 1406, quindi è probabile che non sia quello.

Come ho detto non capisco dove le variabili vengono inizializzate (mai assumere che una variable è inizializzata a zero) e nella chiamata alla funzione usi anche altri puntatori. Per esempio il puntatore ritornato da Read_Ads7846, se non vedo male è la variable Screen statica nella funziona stessa, mentre in altre parti usi la variable globale. Inoltre non fai un controllo sul valore NULL che la funzione potrebbe ritornare.

Ti consiglierei di fare un po' di pulizia generale, se usi le variabili globali togli i parametri dalle funzioni, viceversa se usi i parametri togli le variabili globali. E occhio ai puntatori che vengono ritornati dalle funzioni, controllare sempre la validità.

Re: errore compilatore

Posted: Fri May 24, 2013 2:46 pm
by topogigio
vero... immagino che il matrixPtr sia ok... oops mi era sfuggito, non lo avevo sostituito.
entro nel dettaglio e ne sostituisco uno per volta.
Ciao

Re: errore compilatore

Posted: Fri May 24, 2013 4:22 pm
by topogigio
avevi ragione macca era wick che voleva/doveva scrivere il driver... ho fatto confusione io.
Ciao

Re: errore compilatore

Posted: Fri May 24, 2013 4:35 pm
by Wick
topogigio wrote:avevi ragione macca era wick che voleva/doveva scrivere il driver... ho fatto confusione io.
Ciao
Esatto.. :D Ma per il momento nemmeno io dispongo dell'LCD. Sto aspettando la fine degli esami, poi proverò sicuramente il tuo driver.