Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Piszę mały program w języku C który odbiera dane z portu ttys0i wyświetla w konsoli przez printf
wygląda mniej więcej tak
main() { while(1) { get_from_com(); wyswietl(); } }
lecz po uruchomieniu go użycie procesowa idzie w 100% , co prawda mogę użyć usleep(10) ,ale kiedy wpływa to na "upuszczanie" danych napływających z portu ttys0 , jak temu zapobiedz ?
Offline
W pradawnych czasach używano do tego buforka. Robisz buforek na dane, odpowiednio duży i dobierasz do tego czas uśpienia wątku.
W dzisiejszych czasach raczej mamy specjalne interfejsy do usypiania, a aktywujące się na dane zdarzenie - najczęściej zwane przerwaniem (w średniowieczu). Pewnie używasz jakiegoś socketu czy coś. To powinno Cię zainteresować pollowanie, selecty i takie tam.
http://linux.die.net/man/2/poll
http://linux.die.net/man/2/select
Inny pomysł to użycie funkcji blokującej wątek, tj. Twoje get_from_com() winno blokować wątek. Raczej nie sądzę by ciągły przepływ danych w tym wątku powodował zużycie procesora, więc pewnie zużywa do nic nie robienie.
Offline
O lol jaki kod :D
ogólnie konstrukcje typu while(1) {} to się stosuje do róznego rodzaju "idlerów" na niskim priorytecie, albo do stres testu. Można też na tym liczniki i "delay" zrobić.
Offline
W zasadzie.... A czy czasem nie wystarczy Ci program "picocom". Np.
picocom -b 115200 /dev/ttyS0
To działa naprawdę wyśmienicie (wyjście to: CTRL+A+X)
Offline
Niestety nie ,ponieważ rozwijam swój program w innym kierunku
Offline