Pagina 1 di 1
comunicazione seriale
Inviato: lun 11 mag 2009, 22:34
da leocata
Ho da sempre il pallino della comunicazione tramite porta seriale /dev/ttyS0 (dos: COM1) qualcuno di voi ha esperienza in c++ sull'argomento? io ho usato tramite diverse prove una libreria (ctb) che doveva essere Cross Platform su win funziona (diciamo...grosso modo) ma con linux non riesco...
Re: comunicazione seriale
Inviato: lun 11 mag 2009, 22:51
da phobos3576
La prima cosa da dire è che su Linux la porta seriale deve essere inizializzata; in particolare, su Slackware il file /etc/rc.d/rc.serial non ha i permessi di esecuzione per cui la seriale non viene inizializzata al boot.
Tale inizializzazione viene effettuata con un comando del tipo:
Codice: Seleziona tutto
setserial /dev/ttyS0 port 0xac00 UART 16550A irq 17 Baud_base 921600
I dati relativi all'indirizzo di porta (nel mio caso
0xac00) e all'IRQ da usare (nel mio caso
17) li puoi ricavare da KInfoCenter - sezione PCI; ovviamente, è anche necessario che il supporto della seriale sia abilitato nel kernel.
Una volta effettuata l'inizializzazione, per sapere se la porta sta funzionando puoi provare a collegare un vecchio modem seriale (supportato da Linux) e effettuare il test (Interroga Modem) dall'applicazione KPPP.
Se tutto sta funzionando a dovere, puoi farti un giro in Rete dove si trova una enorme quantità di materiale sulla programmazione della seriale.
Re: comunicazione seriale
Inviato: ven 15 mag 2009, 22:59
da Calzo
leocata ha scritto:io ho usato tramite diverse prove una libreria (ctb) che doveva essere Cross Platform su win funziona (diciamo...grosso modo) ma con linux non riesco...
Di questa libreria non so... però sotto Linux o usi i device driver aperendoli con read&write e configurando la seriale con le funzioni che trovi in termios.h, oppure puoi usare
ioperm() e poi andare a scrivere sul dispositivo tramite
outb.
Bhè questo in C, ma in C++ non dovrebbero esserci differenze in tal senso.
Per la portabilità non saprei. Ho visto che esiste un wrapper multipiattaforma per le Qt (QextSerialPort) per la gertione della seriale, ma non le ho mai usate.
bye