Implementacja timeoutu w komunikacji szeregowej w Keil przy problemach z połączeniem

C i komunikacja.





Poprzedni Następny
Wiadomość
Spis treści
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: C i komunikacja.
Date: Sun, 14 Sep 2003 16:41:23 +0200


Czesc,
Podczas mojej zabawy znowu natknalem sie na problem. (dotyczy keil'a).
Mam komunikacje szeregowa z innym ukladem. Wysylam zapytanie do tego
urzadzenia, w odpowiedzi mam otrzymac kod. Realizuje to tak:
puts("rozkaz");
gets(buffor,strlen(buffor));

ale teraz wlasnie rodzi sie problem, co zrobic jak magistrala polaczeniowa
bedzie rozlaczona? tzn. jak zrobic timeout, by powiedzmy po x czasie proba
zostala ponowiona? gets "zawiesza" program w tym miejscu. Znalazlem funkcje
ungetchar(znak), czy takie cos realizuje sie przez te funkcje i timera? Z
timerem powinienem dac sobie rade (jest pare przykladow w exemplach), a
funkcje ungetchar musialbym wykonac tyle razy ile znakow oczekuje? czyli
strlen(buffor)?
A moze jest inny sposob?

pozdrawiam,
Bartek.




========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Marek" <neticus_at_nospam_wp.pl>
Subject: Re: C i komunikacja.
Date: Sun, 14 Sep 2003 22:35:50 +0200


Mam komunikacje szeregowa z innym ukladem. Wysylam zapytanie do tego
urzadzenia, w odpowiedzi mam otrzymac kod. Realizuje to tak:
puts("rozkaz");
gets(buffor,strlen(buffor));

ale teraz wlasnie rodzi sie problem, co zrobic jak magistrala polaczeniowa
bedzie rozlaczona? tzn. jak zrobic timeout, by powiedzmy po x czasie proba
zostala ponowiona? gets "zawiesza" program w tym miejscu. Znalazlem
funkcje
ungetchar(znak), czy takie cos realizuje sie przez te funkcje i timera? Z
timerem powinienem dac sobie rade (jest pare przykladow w exemplach), a
funkcje ungetchar musialbym wykonac tyle razy ile znakow oczekuje? czyli
strlen(buffor)?
A moze jest inny sposob?

Sposobów jest multum, ale oto pierwszy z głowy:

napisać swoje getc(), (skopiować i zmienić standardowe),
które ma wbudowany timeout i po jego przekroczeniu
zwraca zamiast znaku np. 0xFF.

W swoich programach robię zresztą najczęściej inaczej:
znaki odbierają się w przerwaniu, a pętla oczekiwania
na odpowiedź liczy maksymalny czas na jej nadejście
i potem sygnalizuje timeout.

Pzdr,

Marek



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!news.ats.pl!not-for-mai