Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ricezione stringhe su porta seriale
Forum - C/C++ - Ricezione stringhe su porta seriale

Avatar
Il_maca (Ex-Member)
Pro


Messaggi: 163
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:42
Martedì, 30/09/2014
Salve a tutti,
sono alle prese con un nuovo mondo e sto riscontrando qualche problema :D
In sostanza ho necessità di elaborare delle stringhe che ricevo su porta seriale, sul mio BeagleBone Black (con Debian).
La porta seriale è la /dev/ttyO0.
La comunicazione funziona, in quanto con il comando
Codice sorgente - presumibilmente Plain Text

  1. cat /dev/ttyO0


visualizzo correttamente ciò che mando dall'altro computer.
Il problema è che mi servirebbe catturare queste stringhe ed elaborarle con un linguaggio di programmazione. Ho quindi optato per il c++.
Qualcuno potrebbe indicarmi un modo per farlo? Magari in modo asincrono (come ho fatto per vb.net con un handler)... O se esiste qualche guida specifica...

Edit:
stavo guardando in giro, in attesa di una risposta, ed ho trovato questa guida:
http://en.wikibooks.org/wiki/Serial_Programming/Serial_Linux
(:-| :-| in realtà l'esempio è in C, I KNOW)
Ma come temevo, il ciclo while che lui effettua per leggere costantemente dalla seriale, mi manda il processore del BeagleBone alle stelle... Questa applicazione dovrà girare per ORE (Circa 15-17 al giorno) di continuo, quindi non credo sia la soluzione più adeguata.
In VB.NET ho potuto impostare un evento alla ricezione dei dati su seriale. In C++ sarebbe possibile una cosa del genere?


Edit 2:
Ok, ho trovato SIGTTIN, un segnale di interrupt generato quando viene scritto sulla seriale... dovrei ora impostare l'evento

Ultima modifica effettuata da Il_maca il 30/09/2014 alle 14:59
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:29
Martedì, 30/09/2014
Ti do un suggerimento : guarda se il comando cat accetta un file come parametro

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:58
Mercoledì, 01/10/2014
waseem ... stai utilizzando molto male il forum ... ripassa un po' le regole ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 16:19
Mercoledì, 01/10/2014
waseem? Chi è? Ti riferisci a me?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:36
Mercoledì, 01/10/2014
No ... il post è stato rimosso ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 16:41
Mercoledì, 01/10/2014
Ah.... ok. Ne è rimasto uno suo su un altro thread, lo ho visto 5 minuti dopo di questo

PM Quote
Avatar
Il_maca (Ex-Member)
Pro


Messaggi: 163
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:06
Mercoledì, 01/10/2014
Ciao, scusami il ritardo. Effettivamente ho studiato la cat. Si, prende un file in ingresso e sputa il risultato sulla console o in un altro file. Quindi mi consiglieresti di avviare la cat e far scrivere in un file di testo ciò che riceve?

Ultima modifica effettuata da Il_maca il 01/10/2014 alle 21:08
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:26
Mercoledì, 01/10/2014
No... ti consiglio di fare:
Codice sorgente - presumibilmente Plain Text

  1. fstream seriale("/dev/ttyO0", std::fstream::in | std::fstream::out)
  2. std::string ContenutoLeggibileAncheConCAT;
  3. seriale >> ContenutoLeggibileAncheConCAT;
  4. seriale.close();



e poi lavori sulla stringa ottenuta. Questo DOVREBBE funzionare, visto che IN TEORIA la seriale è gestita come un file, come sono gestiti tramite dei files i pin digitali general purpouse sulle schede pcDuino, Raspberry e in teoria anche beaglebone

PM Quote