Article View: be.comp.programming
Article #736Re: Vertraagde read() op serial port
From: Leon Zandman
Date: Mon, 15 May 2006 17:14
Date: Mon, 15 May 2006 17:14
54 lines
3776 bytes
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-mailReferences:
<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>