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