Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT




Loading

take & give semaphore

Posted by Martin Velek on December 11, 2008
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

RE: take & give semaphore

Posted by Richard on December 12, 2008
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.

RE: take & give semaphore

Posted by Martin Velek on December 12, 2008
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


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS