🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #736

Re: Vertraagde read() op serial port

#736
From: Leon Zandman
Date: Mon, 15 May 2006 17:14
54 lines
3776 bytes
> Ik moet communiceren met een serial device dat een beetje onnozel is: het
> spreekt geen software flow control en mijn hardware beschikt niet over de
> nodige draadjes voor hardware flow control (en dat kan ik niet makkelijk
> veranderen).

Ik heb nu een paar jaar ervaring met het aansturen van apparatuur via 
een seriele aansluitingen (RS232) en heb eigenlijk nog nooit een 
apparaat gehad dat flow control gebruikte!

> Nu moet ik daar wel een "asynchroon" protocol over spreken.  Met andere
> woorden, ik write() nu iets en het device stuurt data terug, maar ik wil die
> pas binnen een paar seconden/minuten read()en.  Zonder flow control kan ik me
> niet meteen een manier verzinnen om dat te implementeren.

Zolang je niets read() op die seriel poort blijft de data meestal wel 
staan, dus je kunt in theorie gewoon na een paar minuten alsnog het 
antwoord opvragen. Maar er zijn natuurlijk betere oplossingen.

> Een mogelijkheid zou zijn om voor mijn write() een thread af te vuren die
> select() en read() in een buffer en mijn higher level "read" die buffer te
> laten lezen.  Dat is echter een tamelijk dure oplossing.

Zo doe ik het meestal wel. Alleen maak ik niet per request een nieuwe 
thread aan, maar heb ik een algemene receive-thread beschikbaar. Soms 
laat ik deze continu de seriel poort in de gaten houden en soms activeer 
ik 'm pas nadat ik iets verzonden heb. Deze receive-thread stopt dan de 
ontvangen data in een buffer. Eventueel kun je de receive thread nog wat 
extra logica meegeven, zodat 'ie kan bekijken of de data inderdaad is 
wat je verwacht had. Want als dat niet zo is, dan kun je het direct 
weggooien/negeren.

Vervolgens hangt het van het communicatieprotocol af wat je met die data 
in de buffer doet. Je kunt de buffer gewoon in z'n geheel beschikbaar 
stellen aan je main-thread. Als je de zaken goed synchroniseert 
(kritieke sectie/mutex o.i.d.) dan moet dat geen probleem zijn. Je kunt 
ook de receive-thread laten kijken of de data in de buffer aan bepaalde 
voorwaarden voldoet, zoals bijv. kijken of er een terminator-character 
aanwezig is. Indien dit het geval is, dan kun je het relevante stuk uit 
de buffer middels een event/message aan je main thread presenteren.

Groeten,

Leon Zandman



> 
> Kent er iemand een manier om dit met de normale POSIX serial interface te
> regelen?
> 
> Platform is Linux 2.4 op ARM, als dat wat uitmaakt.
> 
>  - Philip
> 
Technical Details
Message-ID: <e4act6$kve$1@news1.zwoll1.ov.home.nl>
Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!news.glorb.com!newsgate.cistron.nl!news2.euro.net!213.132.189.2.MISMATCH!multikabel.net!feed20.multikabel.net!newshub2.home.nl!newshub1.home.nl!home.nl!not-for-mail
References: <slrne6gc5j.2iu4.philip+usenet@fasolt.home.paeps.cx>

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,ede648acecc17a6e
X-Google-Thread: 106397,ede648acecc17a6e
X-Google-Thread: 107324,ede648acecc17a6e
X-Google-Attributes: gidfcea4,gid106397,gid107324,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!news.glorb.com!newsgate.cistron.nl!news2.euro.net!213.132.189.2.MISMATCH!multikabel.net!feed20.multikabel.net!newshub2.home.nl!newshub1.home.nl!home.nl!not-for-mail
From: Leon Zandman <usenet@wirwar.com>
Newsgroups: be.comp.programming,nl.comp.os.linux.programmeren,nl.comp.programmeren
Subject: Re: Vertraagde read() op serial port
Date: Mon, 15 May 2006 19:14:36 +0200
Organization: @Home Benelux
Lines: 54
Message-ID: <e4act6$kve$1@news1.zwoll1.ov.home.nl>
References: <slrne6gc5j.2iu4.philip+usenet@fasolt.home.paeps.cx>
NNTP-Posting-Host: cc467650-b.groni1.gr.home.nl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Trace: news1.zwoll1.ov.home.nl 1147713254 21486 82.73.138.58 (15 May 2006 17:14:14 GMT)
X-Complaints-To: usenet@corp.home.nl
NNTP-Posting-Date: Mon, 15 May 2006 17:14:14 +0000 (UTC)
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
In-Reply-To: <slrne6gc5j.2iu4.philip+usenet@fasolt.home.paeps.cx>