|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
[c++] come gestire una porta seriale....
da un pò di tempo ho in mente di costruire un sistema di acquisizione dati tramite una porta seriale e di interfacciare un PIC con il Pc... Dato che conoscevo il basic ed il pascal ed avevo voglia di crescere ho deciso di implementare un programma in c++. Volevo realizzare qualcosa cross platform e pensai di usare WXdev-cpp con una libreria free la libwxctb, decisi inoltre di leggere un libro sul c++ [Horstmann] ma mi accorsi che c'era ben poco di quello che volevo trattare....
Qualcuno di voi ha fatto delle esperienze del genere? Poi una considerazione o meglio uno sfogo, in effetti ho capito che, mentre negli anni 80-90 con un pò di inventiva riuscivi a fare tanto oggi non è più così. Per esempio secondo quanto ho letto, se nn ho capito male, per gestire una seriale in win32 con la benedizione M$ devo usare le API WIN32 ![]() ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
![]() Se hai proprio bisogno/voglia di bypassare le funzioni dell'API ad alto livello messa a tua disposizione dall'OS puoi sempre implementare un bel device driver. Ci sono drivers (GiveIO, PortIO, etc) che consentono di accedere all'hardware in modo più diretto. |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
ma adesso nn vorrei sbagliare ma... cmq se non sbaglio, il vecchio QB apriva banalmente un flusso su porta aprendo un file di lettura-scrittura, cosa che mi sembra ragionata e compatibile con il concetto di stream (cout e cin). Il driver è una soluzione ma nn so se in effetti quanto è poi compatibile con un programma cross platform.. meglio la libreria libwxctb... Ma a proposito di crash, a me le API nn sembrano trasparenti e chi dice che siano affidabili e poi su Linux come lo ricompilo...devo mettere nelle mie macchine un pizzo per la M$ ?(ma sono in effetti delle macro??).
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
poi con le api win32 può benissimo essere che ti diano in mano uno stream di ingresso e uno in uscita: tu gestisci i flussi, il s.o. si arrangia a dialogare con la porta seriale. esiste persino una soluzione per java (se ti interessa la portabilità), ma ovviamente fa uso di JNI e di driver specifici per ciascun s.o. (attualmente il pacchetto javax.comm è alla versione 3, la quale supporta linux ma non windows... per quest'ultimo devi cercare la versione 2 (non sul sito Sun, ma nel sito di qualche università mi pare... cerca con google)) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
da cancellare
Ultima modifica di variabilepippo : 08-11-2007 alle 16:15. |
![]() |
![]() |
![]() |
#6 | ||||
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
![]() Quote:
Quote:
![]() Fanno esattamente ciò che è descritto nella relativa documentazione, basta studiarsela un po'. Quote:
|
||||
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Purtroppo (o per fortuna) con i sistemi operativi Windows attuali non è possibile accedere direttamente all'hardware...quindi su Windows o usi le API Win32 o usi una libreria che usa le API Win32...non ci sono alternative
![]() Un programma che accede direttamente all'hardware scritto per DOS o per i vecchi Windows da Windows 2000 in poi non funziona più... |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
conosci la libreria libwxctb, è una libreria per la gestione delle porte seriali crossplatform, vai a vedere su www.iftools.com. In effetti i casual programmer sono una versione free del professional programmer e spesso sono i primi a creare qualcosa di innovativo..
![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non la conoscevo, ma se è cross platform dovrebbe fare al caso tuo. Mi immagino che la utilizzerai insieme alle wxWidgets
![]() Hai già fatto qualche prova ? |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
Working in slow progress.. cmq se funziona (e spero di si) realizzare un programma che gestisca un sistema embed dovrebbe essere un gioco da ragazzi. Nel senso che i Pic hanno una porta usb e che il driver microchip trasforma in una seriale ed una seriale vera , per cui sotto qualsiasi s.o (WINZOZ compreso) dovrebbe essere facile creare un sw crossplatform con questa libreria...
speriamo che funzioni.. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
si solo linux e windows ma senza driver ed api ..... Mi chiedo se funzionerà....cmq sarebbe bello sapere se qualcuno è riuscito!
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Ho avuto modo di usarla per delle prove a lavoro e fa il suo sporco lavoro wrappando tutto il casino che serve alle Win32 per realizzare una comunicazione seriale non bloccante. |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Sep 2005
Città: Opinions are like assholes: anybody has one...
Messaggi: 34290
|
Quote:
createfile readfile writefile come stream devi mettere la porta in questo modo: "COM1:\0" ecc poi ci sono i vari param tipo numero di caratteri letti e scritti overlap o meno ecc per l'overlap oltre all'handle devi anche creare la funzione che gestisce l'overlap per testare puoi usare come controparte hyperterminal settato ansi ecc se è quello che ti interessava...
__________________
Ну давай !! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cina, bugiardo - stolen conto: non paghi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NON CERCO PIU' UN ALIMENTATORE DECENTE ----------------> LINK |
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
mi fai un taglia ed incolla di esempio di una comunivcazione su porta com1 a 2400 bps e fullduplex?
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Sep 2005
Città: Opinions are like assholes: anybody has one...
Messaggi: 34290
|
qui non posso perchè il codice ce l'ho su un altro pc e riguarda la comunicazione 115200 8N1 senza controllo di flusso
qui non ho neanche i segnalibri sottomano, lunedi' direi cmq guardi sul tutorial microsoft trovi gli esempi con overlap e senza e i prototipi e parametri li trovi premendo f1 su visualstudio per i parametri che dici c'e' la classe che gestisce l'handle della porta, basta semplicemente assegnare i parametri, una boiata davvero più complicato a dirsi che a farsi: si complica leggermente la cosa con overlap tu per non bloccante intendevi quello ??? perchp la readfile è effettivamente "bloccante" (blocca il controllo del codice) se non usi lìoverlap
__________________
Ну давай !! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cina, bugiardo - stolen conto: non paghi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NON CERCO PIU' UN ALIMENTATORE DECENTE ----------------> LINK |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: May 2002
Messaggi: 83
|
Ho provato ad usare sta benedetta libreria..... Ma nn riesco ad installarla su dev-cpp ... qualcuno può aiutarmi........???
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
Cosa intendi con "non riesco ad installarla"? L'hai compilata con MinGW? Se posso darti un ulteriore suggerimento: installa la nightly build di Code::Blocks, configura l'IDE per usare MinGW ed usa il CodeBlocks project file di libwxctb per compilare la libreria ed il relativo programma dimostrativo. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:52.