xSempahoreTake Returns pdTRUE without Give?

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

xSempahoreTake Returns pdTRUE without Give?

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.

xSempahoreTake Returns pdTRUE without Give?

Thank you for the clarification, That was just what I needed!