Newsgroup: it.comp.os.linux.development
Titolo: Le porte seriali

Ciao a tutti ho dei problemi con l'utilizzo delle porte seriali, ho
trovato diversi esempi e spiegazioni sul come utilizzarle in c, ma non
riesco comuncue a comunicare, sia in ricezione che in invio dati
qualcuno sa darmi una mano grazie!



fede wrote:

... magari se cerchi di essere un po' più preciso...
-- 
SF
"Spartani... mangiate tanto a colazione perchè stasera ceneremo nell'Ade!!"

allora io devo programmare una scheda chiamata fox board che ha linx
embedded, ha 3 porte seriali /dev/ttyS sto cercando di capire come
inviare e ricevere dai e per ora ho collegato la seconda porta ad un
pc cn hiper terminal, ma qualsiasi dato ke invio con il semplice
programma in c che ho fatto non viene ricevuto, ma non riscontro
nessun errore con  la funzione open ne con la write

se vuoi metto anke il codice che utilizzo

 
meglio, magari anche con l'output del programma, visto che non credo quella 
scheda l'abbiano in molti nel newsgroup.
Ad esempio, la write restituisce un valore.. ne tieni conto? ti restituisce un 
valore "corretto" (ovvero il numero di byte che ti aspetti)?


 writes:

non passi il self-test per la coerenza se scrivi "scheda" col ch e
"ke" col k.  se i programmi li scrivi con lo stesso stile, il loro
problema potresti essere tu.
p.s.: minicom funziona sempre.
-- 
|   Maurizio Loreti -- 
ROT13:ybe...@cq.vasa.vg
   |  (@_
| Un. of Padova, Dept. of Physics, Padova, Italy |  //\
|     
http://www.pd.infn.it/~loreti/mlo.html
     |  V_/_

domani metto la codifica perche la ho su un altro pc.
Si tengo conto del valore di ritorno e faccio un controllo, ma non mi
ritorna -1 è quindi non sembrerebbe ci siano errori

ecco la codifica:
#include <stdio.h>   /* Standard input/output definitions */
#include <string.h>  /* String function definitions */
#include <unistd.h>  /* UNIX standard function definitions */
#include <fcntl.h>   /* File control definitions */
#include <errno.h>   /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
    /*
     *  Open serial.
     *
     * Returns the file descriptor on success or -1 on error.
     */
int open_port(void)
{
      int fd; /* File descriptor for the port */
      fd = open("/dev/ttyS3", O_RDWR | O_NOCTTY | O_NDELAY);
      if (fd == -1)
      {
       /*
	* Could not open the port.
	*/
	perror("open_port: Unable to open /dev/ttyS0 - ");
      }
      else
	fcntl(fd, F_SETFL, 0);
      return (fd);
}
int config_port(int fd)
{
	struct termios options;
	    /*
	     * Get the current options for the port...
	     */
	tcgetattr(fd, &options);
	    /*
	     * Set the baud rates to 9600...
	     */
	 cfsetispeed(&options, B9600);
	 cfsetospeed(&options, B9600);
 	   /*
	     * Enable the receiver and set local mode...
	     */
	options.c_cflag |= (CLOCAL | CREAD);
	    /*
	     * Set the new options for the port...
	     */
	//set 8N1
	options.c_cflag &= ~PARENB;
	options.c_cflag &= ~CSTOPB;
	options.c_cflag &= ~CSIZE;
	options.c_cflag |= CS8;
	//salva le modifiche
	tcsetattr(fd, TCSANOW, &options);
}
int main(void):w1
{
	int fd;
	int n;
	fd=open_port();
	config_port(fd);
	n = write(fd, "A",1);
	if (n < 0)
	        fputs("write() failed!\n", stderr);
	close(fd);
}

 


per quello che riguarda l'errore è un errore mio di battitura, perche
ho protùvato diverse volte con ognuna delle 3 seriali quindi mi sono
dimenticato di cambiare il messaggio di errore. Per quello che ho
capito comunque l'errore che faccio è in fase di scrittura poche una
volta che la porta è stata aperta e configurata quando dovrebbe
scrivere mi dice "Segmentation fault" è viene interrotta la procedura

si dovrebbero essere le opzioni giuste le ho trovate in una guida

 
allora deciditi:
1) la write() funziona correttamente ma i dati non vengono spediti ;
2) il programma va' in crash
una opzione esclude l'altra. Se č vera la 2), allora controlla anche il file 
core che ti dice *precisamente* dov'č l'errore; in caso contrario - č vera la 
1) - allora il problema č nella configurazione della seriale o nel setup della 
scheda. Verifica.
-- 
SF
"Spartani... mangiate tanto a colazione perchč stasera ceneremo nell'Ade!!"

ho risolo grazie