|
||||
|
|||||||
![]() |
|
|
Strumenti della discussione | Modalità di visualizzazione |
|
|
#1 (permalink) |
|
Nuovo della community ![]()
10 Messaggi
![]() |
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);
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. |
|
|
|
|
|
#2 (permalink) |
|
Utente della community ![]() ![]()
271 Messaggi
![]() |
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 |
|
|
|
|
|
#3 (permalink) | |
|
Nuovo della community ![]()
10 Messaggi
![]() |
Quote:
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ò! |
|
|
|
|
|
|
#4 (permalink) |
|
Utente della community ![]() ![]()
271 Messaggi
![]() |
E chi l'aveva notato l'uguale.... ehehehhe
![]()
__________________
http://mrhyde.altervista.org |
|
|
|
![]() |
| Strumenti della discussione | |
| Modalità di visualizzazione | |
|
|
Tutti gli orari sono GMT +2. Attualmente sono le 09:55.














Modalità lineare

