Quality RTOS & Embedded Software

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


xSempahoreTake Returns pdTRUE without Give?

Posted by PhenomX on March 22, 2012
Hi guys,

I just recently started using FreeRTOS with the MSP430, and I don't understand why my implementation of a binary semaphore is not behaving as expected. From my understand, I first create the binary semaphore which is initially blocked until a xSemaphoreGive is done.

In the code below, I want to loop until reset_count becomes 4 within the timer interrupt vector. Only then I want to break from the while loop. the xSemaphoreTake() returns pdTRUE a give has not been given. Why is this happening? Is my understanding of semaphores wrong?

while( !reset_flag )
/* Checking if there any SemGive of the user semaphore */
if ( pdTRUE == xSemaphoreTake(xUserSemaphore, 0xFFFF))


// Timer A1 TAxCCR0 Interrupt
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR( void )
{ /* CCR0 will fire this interrupt */

/* set flag for which timer interrupt is being used */
signed portBASE_TYPE xHigherPriorityTaskWoken;

if( ++reset_count == 4 )
xHigherPriorityTaskWoken = pdFALSE;
reset_flag = 1;



RE: xSempahoreTake Returns pdTRUE without Give?

Posted by Richard on March 22, 2012
Binary semaphores are created with the semaphore available. Therefore the first take will succeed no matter what. Add a call to xSemaphoreTake(xUserSemaphore, 0) immediately after the semaphore is created. That way the semaphore will not be available until the ISR has given it, which is I think what you want.


RE: xSempahoreTake Returns pdTRUE without Give?

Posted by PhenomX on March 22, 2012
Thank you for the clarification,

That was just what I needed!

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

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

Latest News

FreeRTOS v10.2.0 is available for immediate download. MIT licensed, and including RISC-V and ARMv8-M (Cortex-M33) demos.

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

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


FreeRTOS and other embedded software careers at AWS.

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Cadence Tensilica Cortes

Espressif ESP32

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

Xilinx Microblaze and Zynq partner