xSemaphoreTake and xSemaphoreGive
xTaskCreate( vTestTask, "Task 1", configMINIMAL_STACK_SIZE, (void *) &task1id,tskIDLE_PRIORITY + 2, NULL );
xTaskCreate( vTestTask, "Task 2", configMINIMAL_STACK_SIZE, (void *) &task2id,tskIDLE_PRIORITY + 2, NULL );
xTaskCreate( vTestTask, "Task 3", configMINIMAL_STACK_SIZE, (void *) &task3id,tskIDLE_PRIORITY + 2, NULL );
static void vTestTask( void *pvParameters )
{
int taskId;
taskId = *((int *)pvParameters);
while(1)
{
gdb_putc(1);
if ( xSemaphoreTake( xSemaphore, 0 ) == pdTRUE )
{
gdb_putc(’1’);
xSemaphoreGive( xSemaphore );
}
}
}
I create 3 Tasks,but only task3 works.I want tasks to run one by on,How To Do?
xSemaphoreTake and xSemaphoreGive
You don’t really provide enough information to be able to give an answer.
How do you know only one task is running?
Are you using the preeptive kernel?
Which processor are you using?
Where is the semaphore created?