Obtaining Semaphore in a Interrupt?
Victor Vengerov
Victor.Vengerov at oktetlabs.ru
Wed Sep 3 15:01:23 UTC 2008
Leonard,
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.
Regards,
Victor
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_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
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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