User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

errore compilatore

Sat May 18, 2013 5:51 pm

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...

User avatar
Wick
Posts: 43
Joined: Tue Nov 20, 2012 6:45 pm
Location: Italy
Contact: Website

Re: errore compilatore

Sat May 18, 2013 10:44 pm

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
Rpi-hw > http://hackyourmind.org/projects/rpi-hw
Website > http://hackyourmind.org/
Google+ > https://plus.google.com/+GiacomoTrudu

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Sat May 18, 2013 11:04 pm

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

macca
Posts: 139
Joined: Tue Oct 16, 2012 9:14 am

Re: errore compilatore

Sun May 19, 2013 6:59 am

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.

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Sun May 19, 2013 2:14 pm

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.

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Thu May 23, 2013 8:29 pm

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...

macca
Posts: 139
Joined: Tue Oct 16, 2012 9:14 am

Re: errore compilatore

Fri May 24, 2013 6:57 am

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.

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Fri May 24, 2013 7:09 am

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!!!

macca
Posts: 139
Joined: Tue Oct 16, 2012 9:14 am

Re: errore compilatore

Fri May 24, 2013 8:44 am

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à.

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Fri May 24, 2013 2:46 pm

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

User avatar
topogigio
Posts: 38
Joined: Fri May 10, 2013 1:35 am

Re: errore compilatore

Fri May 24, 2013 4:22 pm

avevi ragione macca era wick che voleva/doveva scrivere il driver... ho fatto confusione io.
Ciao

User avatar
Wick
Posts: 43
Joined: Tue Nov 20, 2012 6:45 pm
Location: Italy
Contact: Website

Re: errore compilatore

Fri May 24, 2013 4:35 pm

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.
Rpi-hw > http://hackyourmind.org/projects/rpi-hw
Website > http://hackyourmind.org/
Google+ > https://plus.google.com/+GiacomoTrudu

Return to “Italiano”