[ECOS] Determining current context

Gary D. Thomas gary.thomas@mind.be
Tue May 27 13:02:00 GMT 2003

On Mon, 2003-05-26 at 23:10, David Brennan wrote:
> On Mon, 2003-05-26 at 14:38, Gary D. Thomas wrote:
> > On Mon, 2003-05-26 at 11:51, David Brennan wrote:
> > > Is there a function somewhere which will tell my code what context it is
> > > currently in?
> > > Specifically this is for i386-pc platform if that matters.
> > 
> > What sort of context are you referring to?  Do you mean ISR vs DSR vs
> > thread?  In this case, you'll just have to know by design.  In other
> > words, an ISR will be a particular piece of code that only runs as
> > a direct result of an interrupt.  This code should not be used any
> > other way.  Similarly, a DSR is only run as a result of an ISR causing
> > it to be dispatched.  All other code is thread code.
> > 
> > -- 
> > Gary D. Thomas <gary.thomas@mind.be>
> > 
> That was the impression that I got from the sample code.  However, I
> have a generic function which I would like to be able to call from any
> context, but it must behave slightly differently in interrupt context. 
> I was hoping that there was an operating system call of some sort which
> could tell me.  (Obviously it must know the current context).  I'd even
> settle for something as crazy as checking to see if the current stack
> area is the isr area.

The system does not keep explicit track - it is only implicit, based 
on what set of functions are being called at any moment.  Partly this
is because ISR functions run immediately, with no intervention by the
kernel.  The only thing that I can think of that would distinguish ISR
context from DSR or thread is that the scheduler is always locked 
during ISR calls.

That said, IMO calling a function which has different behaviour based 
on who called it (where called from) is questionable.  At the very
least, you should pass an explicit parameter to control this behaviour.

Gary D. Thomas <gary.thomas@mind.be>

Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss

More information about the Ecos-discuss mailing list