#include "FreeRTOS.h" #include "task.h" #include "semphr.h" SemaphoreHandle_t sh; void vTask1( void *p) { for( ;; ) { printf("Task 1 is running %d \n",xTaskGetTickCount()); xSemaphoreGive(sh); vTaskDelay(1000); } } void vTask2( void *p) { for( ;; ) { printf("Task 2 is running %d \n",xTaskGetTickCount()); xSemaphoreGive(sh); vTaskDelay(1000); } } void vTask3( void *p) { for( ;; ) { xSemaphoreTake(sh,1000); xSemaphoreTake(sh,1000); printf("Task 3 is running %d \n",xTaskGetTickCount()); vTaskDelay(1000); } } int Example4( void ) { xTaskCreate( vTask1, "Task 1", 1000, NULL, 1, NULL ); xTaskCreate( vTask2, "Task 2", 1000, NULL, 1, NULL ); xTaskCreate( vTask3, "Task 3", 1000, NULL, 1, NULL ); sh=xSemaphoreCreateBinary(); vTaskStartScheduler(); for( ;; ); return 0; }