Quality RTOS & Embedded Software

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




Loading

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?

[code
while( !reset_flag )
{
/* Checking if there any SemGive of the user semaphore */
if ( pdTRUE == xSemaphoreTake(xUserSemaphore, 0xFFFF))
{
break;
}

}

// 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;
xSemaphoreGiveFromISR(xUserSemaphore,
&xHigherPriorityTaskWoken);
reset_flag = 1;
}

}


Thanks,
-Adrian

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.

Regards.


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