ulTaskNotifyTake from ISR

Posted by thoru on March 17, 2015

Hi,

Is it possible to use ulTaskNotifyTake() with a zero wait time from an ISR? I want to use it as a binary semaphore to get hold of a storage buffer.

Regards,

Remco Poelstra


ulTaskNotifyTake from ISR

Posted by rtel on March 17, 2015

It might [unofficially] be possible, but looking at the code I would say it would depend on which port you are using....which are you using?

Regards.


ulTaskNotifyTake from ISR

Posted by heinbali01 on March 18, 2015

Hi Remco,

I don't know if it is safe to call ulTaskNotifyTake() from an interrupt, but: normally the xxxTake would be called from within a task, and xxxGive from within an interrupt or a task.

Now you get an interrupt and you want to see if "a resource" is available?

Isn't a simple volatile flag enough for this?

~~~~~ #define FLAGBUSY 1 volatile uint32t flags;

void isr( void )
{
    /* Here 'flags' is only read, not written. */
    if( ( flags & FLAG_BUSY ) == 0 )
    {
        /* Buffer is available */
    }
}

void update_buffer ()
{
    flags |= FLAG_BUSY;
    /* Buffer may be accessed */
    flags &= ~( FLAG_BUSY );
}

~~~~~

Regards.