public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Lunn <andrew@lunn.ch>
To: e.coullien@faiveley.com
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] Question on Posix Select function
Date: Tue, 20 Jun 2006 10:34:00 -0000	[thread overview]
Message-ID: <20060620103359.GH21228@lunn.ch> (raw)
In-Reply-To: <C1257192.00330CCC.00@smtp.faiveley.fr>

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

      reply	other threads:[~2006-06-20 10:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-19  9:17 e.coullien
2006-06-20 10:34 ` Andrew Lunn [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060620103359.GH21228@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=e.coullien@faiveley.com \
    --cc=ecos-discuss@ecos.sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).