Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Eclipse+Fedora+v4l2+Strane cose

    Premetto che il programma:
    -è in codice c (non c++)
    -dovrebbe essere violentemente ottimizzato (leggi: girare a fuoco)
    -non ha problemi nè warnings in compilazione
    -crea tra l'altro tre matrici di unsigned char 480X640 più poche stringhe
    -è stato scritto sulla falsa riga del codice d'esempio in fondo al pdf:"Video for Linux Two API Specification
    Revision 0.24" (che era funzionante sempre)
    -il programma funziona sempre se lanciato in debug mode (anche senza break point)
    -la cosa più brutta che faccio è:

    unsigned char* cropped_frame[cropped_height];

    for (i=0;i<cropped_height;i++) {
    cropped_frame[i]=start_image_in_frame+i*d_f_width;
    }
    ma avendo solo un puntatore all'area di memoria (restituitomi correttamente da funzioni che non voglio toccare) in cui è salvato il frame di dimensione d_f_width(rappresentato in unsigned char); e volendo poi lavorare in notazione matriciale voi come avreste fatto?

    -lanciato in normal mode (oppure una volta lanciato l'eseguibile), ogni tanto funziona ogni tanto no terminando con valore exit -1

    Non posto il programma perché sono oltre 500 righe di codice piene di macro.
    Le domande che desidero rivolgere alla comunità del forum sono pertanto 3:
    1)Cosa fa il debug mode che il "normal mode" non fa?
    2)Cosa significa exit -1?
    3)Voi come avreste fatto avendo un puntatore ad all'inizio di un area di memoria (che sapete contigua) a usarlo con la notazione matriciale (mat[i][j] per intenderci)?

    Grazie.
    P.S.
    Dubito fortemente che il problema sia legato a linux o fedora. I due imptati principali sono Eclipse e il codice.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    VVoVe: VVoVe: VVoVe: VVoVe: VVoVe: VVoVe: VVoVe:
    Potrebbe essere un problema di ottimizzazione da parte del compilatore: se interviene il debugger forse la memoria viene gestita in modo più protetto. Sicuramente cmq. qualche sovrapposizione di puntatori, o qualcosa di analogo, c'è. Controlla bene i vari accessi alle matrici e tutte le operazioni ai puntatori. Inoltre, per capire dove esce, puoi usare il debug vecchia maniera: seminare in giro per il programma delle stringhe in stderr...

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    1)Cosa fa il debug mode che il "normal mode" non fa?
    Un sacco di cose. Può porre variabili locali e puntatori in stati noti, può addottare un codice malloc e free diverso da quello release.
    2)Cosa significa exit -1?
    Appena incontrata quella istruzione, il programma termina brutalmente e il valore di uscita è -1 appunto.

    3)Voi come avreste fatto avendo un puntatore ad all'inizio di un area di memoria (che sapete contigua) a usarlo con la notazione matriciale (mat[i][j] per intenderci)?
    mat[MAX_COL * i + j];
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Grazie mille per la pronta risposta, forse ho risolto. Vorrei però una conferma.

    Vi ricordate le tre matrici di unsigned char di cui vi ho parlato? Ecco per evitare che il compilatore riallocasse la memoria ad ogni chiamata di funzione le avevo dichiarate globali, quando in realtà vengono usate da una sola funzione (che però viene chiamata più volte con più sottofunzioni, etc.).
    Dichiarandole invece all'interno della funzione in cui vengono utilizzate invece tutto fila liscio (anche se il programma sembra andare un po' più lento).
    Credo che il problema fosse che allocandole globali si esaurisce la memoria, mentre locali no, anche se francamente non so il perché.
    Inoltre è possibile che il "debug mode" di Eclipse abbia più stack del "normal mode" e da qui l'esaurimento in un caso sì nell'altro no.

    Xshodan
    mi sono espresso male: con exit -1 intendevo che eclipse riportava (quando il programma si interrompeva)
    <terminated, exit value: -1>/home/Andrea/Scrivania/progetti_eclipse/v4l2_non_dsp/Debug/v4l2_non_dsp (05/05/09 22.16)

    ed era l'unico indizio (esclusi i vari printf che avevo prontamente disseminato lungo il codice e alcuni file non creati) di una terminazione del programma non corretta. Ho cercato notizie su questo valore di uscita ma non ne ho trovate. Probabilmente è qualcosa che indica un esaurimento della memoria di stack, ma

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    Di solito strutture cosi' grandi sono dinamiche, non statiche, quindi una volta allocate le passi dove ti serve per puntatore, non certo per valore. Mettile pure globali ma allocale dinamicamente.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Eclipse+Fedora+v4l2+Strane cose

    Originariamente inviato da Gorgia666
    -è in codice c (non c++)
    Questo andava specificato anche nel titolo, come da Regolamento...


    Correggo io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.