From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16334 invoked by alias); 20 Jun 2006 10:34:07 -0000 Received: (qmail 16322 invoked by uid 22791); 20 Jun 2006 10:34:05 -0000 X-Spam-Check-By: sourceware.org Received: from londo.lunn.ch (HELO londo.lunn.ch) (80.238.139.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 20 Jun 2006 10:34:03 +0000 Received: from lunn by londo.lunn.ch with local (Exim 3.36 #1 (Debian)) id 1FsdYV-0002AF-00; Tue, 20 Jun 2006 12:33:59 +0200 Date: Tue, 20 Jun 2006 10:34:00 -0000 To: e.coullien@faiveley.com Cc: ecos-discuss@ecos.sourceware.org Message-ID: <20060620103359.GH21228@lunn.ch> Mail-Followup-To: e.coullien@faiveley.com, ecos-discuss@ecos.sourceware.org References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.11+cvs20060403 From: Andrew Lunn X-IsSubscribed: yes Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Subject: Re: [ECOS] Question on Posix Select function X-SW-Source: 2006-06/txt/msg00175.txt.bz2 On Mon, Jun 19, 2006 at 11:17:42AM +0200, e.coullien@faiveley.com wrote: > > > We are working on a package to complete the eCos Intrument package > for communicating with a PC software through Ethernet. The goal is > to record in real time the Instrument informations from the board to > the PC and to watch a graph to show tasks and other instrument > traces. Interesting. How do you solve the obvious race condition that using the network to send the events generate events? Ideally you should use the RedBoot network stack for this. > We began to graph a module with a SELECT function but we have some > difficulties to understand what we see on the Graph. In a task, > before sending, we call the select function. In fact the task which > calls the SELECT function is switching on even if the driver is not > ready to send. So the graph shows that this task is active very > often instead to sleep until the driver is ready to send. Do > someone know how to explain this phenomenon and how does the Posix > select function really work ? There is pritty good comments in the code. Have you read them: // A flag is used to block a thread until data from the device is // available. This prevents all threads from waking up at the same // time and polling for changes. Each thread is allocated a flag bit // via the SELECT_WAIT_FLAG_GET() macro when the thread registers for // selection via cyg_selrecord (). The flag is stored in the driver's // select info block. Only those threads specified via the flags in // the select info are woken up by cyg_selwakeup (). If there are // more than 32 threads in the system, then there is a chance that // cyg_selwakeup () may wake up more than one thread. Each thread then // polls for changes. So you probably have the same bit set as some other thread using the network. Andrew -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss