[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Obtaining Semaphore in a Interrupt?
- Date: Wed, 3 Sep 2008 16:59:52 +0200
- From: Aitor.Viana.Sanchez at esa.int (Aitor.Viana.Sanchez at esa.int)
- Subject: Obtaining Semaphore in a Interrupt?
Normally you should not share resources between tasks and ISR's, but if
you are "obliged" to do that, the only way coming to my mind is to disable
the interrupts while accessing the resource from the tasks. This will of
course affect to your interrupt latency and you need to figure out if you
can live with that.
rtems-users-bounces at rtems.org wrote on 09/03/2008 04:45:12 PM:
> Hi all,
> On the project I'm working on we need to protect a ressource from
> being accessed by multiple tasks.
> For this purpose we use a binary semaphore that is created in the
> following manner :
> sc = rtems_semaphore_create( rtems_build_name( 'D', 'R', 'V', 's' ), 1,
> RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY
> | RTEMS_PRIORITY,
> RTEMS_NO_PRIORITY, &semDriver );
> We use a board based on a LEON2 Processor and we use a few ISR as
> well. These ISRs must often access the same protected ressources
> when triggered.
> The problem arise when we are in a task that is in the middle of
> accessing the protected ressources and that it obtains the semaphore
> and that directly after an interrupt is triggered. The ISR would ask
> for a semaphore when the last one was not released yet, because it
> is in the middle of being processed. We then get a deadlock!
> Could anyone please help me on this ? I guess the best way is to not
> use semaphore in ISR but how can i protect my ressource then !
> The version used of RTEMS is 4.6.6
> Bise L?onard
> rtems-users mailing list
> rtems-users at rtems.com
-------------- next part --------------
An HTML attachment was scrubbed...