take & give semaphore
Hello,
is there a simple way, how to achieve this functionality?
void interrupt_handler_timer_A(void)
{
xSemaphoreGiveFromISROnlyIfSemaphoreWasTakenBefore(xSemaphore);
}
void TaskA(…)
{
startTimerA();
stopTimerA();
xSemaphoreTake(xSemaphore);
exit(1); // we should never get here
}
I mean that the interrupt handler can give semaphore only if was taken before. In other cases it skips it.
Thank you for help
Martin
take & give semaphore
You could do something like this:
if( xQueueIsQueueEmptyFromISR( (xQueueHandle) xSemaphore )
{
____xSemaphoreGiveFromISR( xSemaphore );
}
be careful of race conditions though.
I don’t understand the comment "// we should never get here" in your sample task code. It looks like you would get there as soon as the semaphore was available.
Regards.
take & give semaphore
Hi Richard,
thank you for answer. The comment "// we should never get here" means, that by function stopTimerA() disables generating Timer interrupt.
Amazing function xQueueIsQueueEmptyFromISR. Exactly what I need. I didn’t find it in documentation :( … I would be glad if something like MicroC/OS-II was written about FRT.
BR
Martin