Obtaining Semaphore in a Interrupt?

Victor Vengerov Victor.Vengerov at oktetlabs.ru
Wed Sep 3 15:01:23 UTC 2008


Perform actual interrupt processing at task level! Interrupt handler may 
clean up the interrupt condition in hardware and wake up a dedicated 
(possibly high-priority) task by sending an event, releasing the 
semaphore or by some other synchronization means. Further processing can 
be done at task level - without any limitations.


Leonard Bise wrote:
> 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

Victor Vengerov
OKTET Labs, St.-Petersburg, Russia   Web: www.oktetlabs.ru
Phone +7 812 4286709(office) +7 921 9389372(mobile)

More information about the users mailing list