Quality RTOS & Embedded Software

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


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 ]    [ Privacy ]    [ Sitemap ]    [ ]


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

Latest News

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

Meet Richard Barry and learn about running FreeRTOS on RISC-V at FOSDEM 2019

Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


Careers

FreeRTOS and other embedded software careers at AWS.



FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Renesas

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

Xilinx Microblaze and Zynq partner