Problema configurazione porta seriale linux

di Anonimizzato19067 il
9 risposte
Buonasera ragazzi, dopo un bel po di giorni mi sono reso conto che sbaglio qualcosa nella configurazione della porta seriale (ambiente linux) poichè il buffer che legge da seriale alcune volte arriva sporco. Posto un piccolo esempio e , successivamente, la configurazione da me utilizzata.
Esempio:
buffer1 : #.#messaggio1#!# ->buffer corretto
buffer2 : #.#messaggio2#!##.#parte del messaggio3 ->buffer sporco
buffer3 : parte del messaggio3#!# ->buffer sporco
Dove (#.#) e (#!#) sono i limitatori di inizio e fine messaggio.

I parametri che dovrei settare sono:
  • baud rate = 38400
    data bits = 8
    parity = none
    stop bits = 1
    handshaking = none
Mentre la funzione che utilizzo per configurare la seriale è la seguente:

    speed=B38400;
    cfsetospeed (&tty, speed);
    cfsetispeed (&tty, speed);
    tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
    tty.c_iflag &= ~IGNBRK;   
    tty.c_lflag = 0;                
    tty.c_oflag = 0;               
    tty.c_cc[VMIN]  = 0;            
    tty.c_iflag &= ~(IXON | IXOFF | IXANY); 
    tty.c_cflag |= (CLOCAL | CREAD);
    tty.c_cflag &= ~(PARENB | PARODD);
    tty.c_cflag |= parity;
    tty.c_cflag &= ~CSTOPB;
    tty.c_cflag &= ~CRTSCTS;
Spero qualcuno possa aiutarmi perchè davvero non capisco dove ho sbagliato poichè con il programma "Terminal.exe" , settando i parametri citati in lista il buffer non è mai sporco. Spero di essere stato chiaro, buona serata a tutti.

9 Risposte

  • Ciao, più che un problema di configurazione della seriale a me sembra che tu abbia qualche problema con la routine di ricezione dei caratteri; se tu avessi sbagliato configurazione non saresti in grado di ricevere dei "messaggi" corretti.
  • E come posso risolvere?
  • Riverifica la routine di lettura caratteri, eventualmente se lo credi necessario posta qui il codice
  • Potrebbe essere anche una incompatibilità di baudrate, prova a cambiare velocità su entrambi i dispositivi.
  • Ciao vbextreme! L'OP ci segnala che con un programma di terminale la comunicazione avviene correttamente. Io credo che abbia semplicemente ignorato il valore di ritorno della read() leggendo così dei caratteri randomici laddove, in realtà, non era ancora arrivato nessun nuovo carattere.
  • Risolto era errata parte della configurazione, grazie lo stesso a tutti quanti ^_^
  • Quale parte?
  • Se vuoi posto il codice nuovo così chi ha lo stesso problema può risolvere. Che ne pensi?
  • Non lo penso solo io ... sui forum si fa così ...
Devi accedere o registrarti per scrivere nel forum
9 risposte