RTOS V3.22 Semaphore does not work properly??
Dear all,
I have a situation which I am trying to undertand. The scenario is something like below.
I have two tasks task_A and task_B
A binary semaphore ABC is created.
task_A( )
{
A();
delay 100ticks
}
task_B( )
{
B();
delay 100ticks
}
A( )
{
if(xSemaphoreTake( ABC, portMAX_DELAY ) == pdTRUE )
{
// do something
xSemaphoreGive( ABC );
taskdelay (25 ms; //Note delay here
}
else
{
printf("Task A Error");
}
}
B( )
{
if(xSemaphoreTake( ABC, portMAX_DELAY ) == pdTRUE )
{
// do something
xSemaphoreGive( ABC ); //Note NO delay here
}
else
{
printf("Task B Error");
}
}
My setup is configured as 32bits, thereofre portMAX_DELAY will be large. However I see that I get errors "Task B Error".(and Task A error sometimes) Is it possible that the sempahore is timing out even with portMAX_DELAY or am I doing sonmething wrong here?
Any insight will be appreciated. At he moment my workaround is while ((xSemaphoreTake( ABC, portMAX_DELAY ) != pdTRUE ), but I wnat to know what is wrong.
-regards
Narayan
RTOS V3.22 Semaphore does not work properly??
Its difficult to say, as you are using a rather old version (there have been 23 updates since V3.2.2!). There were some situation where a premature unblock was possible, and under certain circumstances the outer == TRUE was required, but I think this was to do with multiple tasks and interrupts accessing the same queue/semaphore. Do you have anything else accessing the semaphore, or just these tasks?
Can you update to a newer version?
Regards.