Obtaining Semaphore in a Interrupt?

Leonard Bise leonard.bise at syderal.ch
Wed Sep 3 14:45:12 UTC 2008


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

Regards,

Bise Léonard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20080903/0b0d5dfc/attachment.html>


More information about the users mailing list