MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > C/C++



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 11-06-2008, 17:40   #1 (permalink)
Nuovo della community

 
10 Messaggi

jk_olivo novizio della comunita' ( + 10 )
Problema bizzarro nella scrittura di un .txt

Ciao,

l`ultima volta che ho postato un problema, la soluzione che mi avete dato me lo ha risolto!
Spero che vada cosi` anche adesso


Ho scritto un programma in C++ per leggere byte dalla porta seriale (protocollo USART) e scriverli su file di testo.

I byte arrivano a gruppi di 3, il programma ha un ciclo di lettura che non fa altro che leggere questi 3 byte e scriverli su 3 file .txt diversi...
Questo finche non arriva la tripletta 0xff 0xff 0xff
A quel punto esce dal ciclo e termina!

Allego qui il codice...

codice:
  BYTE Working;
  BYTE Reference;
  BYTE Counter; 

  fflush();

  if((wr=fopen("Working.txt","w"))==NULL)
      {
       printf("Errore generazione file!");
       return 1;
      }
    
    if((ct=fopen("Counter.txt","w"))==NULL)
      {
       printf("Errore generazione file!");
       return 1;
      }

    if((rf=fopen("Reference.txt","w"))==NULL) 
      {
       printf("Errore generazione file!");
       return 1;
      }



 while (stop_flag == 0)
    {
        ReadFile(hCom,&Working,1,&dwBytesTransferred_W,0);
        fprintf (wr,"%f\n",(float)Working);
        
        ReadFile(hCom,&Reference,1,&dwBytesTransferred_R,0);
        fprintf (rf,"%f\n",(float)Reference);
    
        ReadFile(hCom,&Counter,1,&dwBytesTransferred_C,0);
        fprintf (ct,"%f\n",(float)Counter);

        if ((Working == 0xff) && (Reference = 0xff) && (Counter = 0xff))
        {
            stop_flag = 1;
        }
    }
    
    fclose (ct);
    fclose (wr);
    fclose (rf);
Sembra semplice e lo e`, se non fosse che quando vado a leggere i file .txt, questi hanno correttamente lo stesso numero di byte ma l`ultimo byte in "Counter.txt" non e`
0xff

Se inoltre stampo "&dwBytesTransferred_C" fuori dal ciclo ottengo 0, il che penso che significhi che l`ultima ReadFile non e` andata a buon fine!
Pero` dal ciclo ci esce, quindi quando va a fare l`"if" Counter e` 0xff...

Avete qualche idea ?!?!


Ultima modifica di jk_olivo : 11-06-2008 a 17:59.
jk_olivo non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-06-2008, 19:17   #2 (permalink)
Utente della community


 
271 Messaggi

Hyde novizio della comunita' ( + 10 )
L'unica idea che mi viene in mente è che la tua lettura è in realtà sfalsata di 1.
Ovvero Counter assume il valore di 0xff al penultimo ciclo e non nell'ultimo.
Quindi nel penultimo giro counter legge 0xff, poi nell'ultimo giro, quando lo 0xff viene letto anche dagli altri esso non riceve nulla e quindi rimane con il valore precedente.
Questo fa si che la if finale comporti l'uscita corretta dal ciclo...
__________________
http://mrhyde.altervista.org
Hyde non è in linea   Bookmark and Share Rispondi quotando
Vecchio 12-06-2008, 00:11   #3 (permalink)
Nuovo della community

 
10 Messaggi

jk_olivo novizio della comunita' ( + 10 )
Quote:
Originariamente inviata da Hyde Visualizza il messaggio
L'unica idea che mi viene in mente è che la tua lettura è in realtà sfalsata di 1.
Ovvero Counter assume il valore di 0xff al penultimo ciclo e non nell'ultimo.
Quindi nel penultimo giro counter legge 0xff, poi nell'ultimo giro, quando lo 0xff viene letto anche dagli altri esso non riceve nulla e quindi rimane con il valore precedente.
Questo fa si che la if finale comporti l'uscita corretta dal ciclo...
Penso di aver trovato la radice del problema...
Sta a monte, nella trasmissione dal microcontrollore: prima di spegnerlo controllavo che il dato fose stato messo "in spedizione" non che fosse stato "effettivamente spedito".

Il programma C++ poi usciva dal ciclo perchè nelle ultime 2 condizioni avevo messo "=" invece che "=="

Insomma, lo facevo uscire dal ciclo io!!!

Penso che il motivo sia questo. Domani testerò!
jk_olivo non è in linea   Bookmark and Share Rispondi quotando
Vecchio 12-06-2008, 01:21   #4 (permalink)
Utente della community


 
271 Messaggi

Hyde novizio della comunita' ( + 10 )
E chi l'aveva notato l'uguale.... ehehehhe
__________________
http://mrhyde.altervista.org
Hyde non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:55.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.