Thread View: pl.comp.os.linux.programowanie
5 messages
5 total messages
Started by Andrzej W.
Thu, 10 Sep 2015 07:31
Port szeregowy - sygnały RI, DCD i "zdarzenia"..
Author: Andrzej W.
Date: Thu, 10 Sep 2015 07:31
Date: Thu, 10 Sep 2015 07:31
35 lines
2579 bytes
2579 bytes
Cześć, Jak dotąd bawiłem się C na mikrokontrolerach i to przez ich pryzmat patrzę na sprawę proszę więc o wyrozumiałość... Mam zewnętrzne czujniki które podłączyłem do systemy (Debian na RPI) poprzez przejściówki RS-USB. Czujniki co jakiś czas (całkiem losowy) wystawia sygnał, podłączyłem go pod linii DCD, a potem zaczyna transmisję. Moja wizja była taka, że piszę funkcję odczytu danych z czujnika "podpinam" ją od zdarzenie zmiany stanu linii DCD lub RI (podobno one powinny generować przerwanie sprzętowe?). Gdy stan linii się zmieni system wywołuje mój kod on zapisuje "gdzieś" odczytaną daną i powiadamia "jakoś" program główny. Program główny pomiędzy odczytami czujników robi co do niego należy albo sobie przysypia puki nie pojawi się sygnał, że odczytano dane. Niestety jedyne co znalazłem co do obsługi linii DCD lib RI to ich odpytywanie albo ioctl -> TIOCMIWAIT. Oba rozwiązania nie pasują do mojej wizji. TIOCMIWAIT obsługuje tylko jeden port więc musiał bym stworzyć oddzielny wątek dla każdego czujnika i wątek dla programu głównego. A odpytywanie w pętli to raczej mało optymalne rozwiązanie. Czy jest jakiś "elegancki" sposób wykrycia zmiany na linii DCD lub RI? Czy pselect albo ppool mogą być użyte do sprawdzania zmiany stanu tych linii? Skłaniam się już do tego by zmienić koncepcję i po prostu czekać na dane z portów szeregowych (np. epoll) olewając sygnał początku transmisji. -- AWa.
Re: Port szeregowy - sygnały RI, DCD i "zdarzenia"..
Author: Sebastian Biały
Date: Thu, 10 Sep 2015 19:01
Date: Thu, 10 Sep 2015 19:01
15 lines
1592 bytes
1592 bytes
On 2015-09-10 09:31, Andrzej W. wrote: > Czujniki co jakiś czas (całkiem losowy) wystawia sygnał, podłączyłem go > pod linii DCD, a potem zaczyna transmisję. To jest zbędne. Rownie dobrze program moze zablokowac sie na read() i jak przyjdzie pierwszy bajt to sie obudzi i zrobi co trzeba. > Czy jest jakiś "elegancki" sposób wykrycia zmiany na linii DCD lub RI? Nie ma po co. > Skłaniam się już do tego by zmienić koncepcję i po prostu czekać na dane > z portów szeregowych (np. epoll) olewając sygnał początku transmisji. Wystarczy read(). Jak kusisz coś robić dodatkowo, to w wątku.
Re: Port szeregowy - sygnały RI, DCD i "zdarzenia"..
Author: Andrzej W.
Date: Thu, 10 Sep 2015 20:43
Date: Thu, 10 Sep 2015 20:43
14 lines
1805 bytes
1805 bytes
W dniu 2015-09-10 o 21:01, Sebastian Biały pisze: >> Skłaniam się już do tego by zmienić koncepcję i po prostu czekać na dane >> z portów szeregowych (np. epoll) olewając sygnał początku transmisji. > > Wystarczy read(). Jak kusisz coś robić dodatkowo, to w wątku. read() na kilku urządzeniach na raz w jednym wątku? Czy może N wątków po jednym read() w każdym i zabawa z synchronizacją tego bałaganu? Dodatkowo jakoś tak read() wiszący tak 16 do 48 godzin do mnie nie przemawia, choć pewnie by działało. -- AWa.
Re: Port szeregowy - sygnały RI, DCD i "zdarzenia"..
Author: Gof
Date: Fri, 11 Sep 2015 09:06
Date: Fri, 11 Sep 2015 09:06
9 lines
1120 bytes
1120 bytes
Sebastian Biały <heby@poczta.onet.pl> wrote: > Wystarczy read(). Jak kusisz coś robić dodatkowo, to w wątku. Po co w wątku? select()... -- "qui hic minxerit aut cacaverit, habeat deos superos et inferos iratos" http://www.chmurka.net/
Re: Port szeregowy - sygnały RI, DCD i "zdarzenia"..
Author: Sebastian Biały
Date: Sun, 13 Sep 2015 17:27
Date: Sun, 13 Sep 2015 17:27
10 lines
1379 bytes
1379 bytes
On 2015-09-10 22:43, Andrzej W. wrote: > > Wystarczy read(). Jak kusisz coś robić dodatkowo, to w wątku. > read() na kilku urządzeniach na raz w jednym wątku? man select() > Dodatkowo jakoś tak read() wiszący tak 16 do 48 godzin do mnie nie > przemawia, choć pewnie by działało. Działa i nie ma z tym problemu.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads