Obtaining Semaphore in a Interrupt?

Aitor.Viana.Sanchez at esa.int Aitor.Viana.Sanchez at esa.int
Wed Sep 3 14:59:52 UTC 2008


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_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
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20080903/24f1eace/attachment-0001.html>

More information about the users mailing list