phenomx wrote on Thursday, 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