🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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"..
#72753
Author: Andrzej W.
Date: Thu, 10 Sep 2015 07:31
35 lines
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"..
#72754
Author: Sebastian Biały
Date: Thu, 10 Sep 2015 19:01
15 lines
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"..
#72755
Author: Andrzej W.
Date: Thu, 10 Sep 2015 20:43
14 lines
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"..
#72757
Author: Gof
Date: Fri, 11 Sep 2015 09:06
9 lines
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"..
#72756
Author: Sebastian Biały
Date: Sun, 13 Sep 2015 17:27
10 lines
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