Obtaining Semaphore in a Interrupt?
leonard.bise at syderal.ch
Wed Sep 3 14:45:12 UTC 2008
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_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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the users