与二进制区别是继承优先级
SemaphoreHandle_t SemaphoreHandle;//互斥锁和二进制信号量都由 SemaphoreHandle_t 类型的变量引用
int cont=0;
void vTaskCode(void *pvParam)//任务
{
BaseType_t BaseType;
printf("code \n");
while (1)
{
BaseType =xSemaphoreTake(SemaphoreHandle,0);//立即
if(BaseType== pdTRUE)
{
printf("ok \n");
for(int i=0;i<10;i++)
{
printf("TASK %d\n",i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
xSemaphoreGive(SemaphoreHandle);//必须先用这个释放
printf("Give \n");
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
else
{
printf("no \n");
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vTaskCode1(void *pvParam)//任务
{
printf("code1 \n");
vTaskDelay(pdMS_TO_TICKS(1000));
while(1)
{
;
}
}
void vTaskCode2(void *pvParam)//任务
{
BaseType_t BaseType;
printf("code2 \n");
vTaskDelay(pdMS_TO_TICKS(1000));
while(1)
{
BaseType=xSemaphoreTake(SemaphoreHandle,1000);//
if(BaseType== pdTRUE)
{
printf("ok2 \n");
for(int i=0;i<10;i++)
{
printf("TASK2 %d\n",i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
xSemaphoreGive(SemaphoreHandle);//必须先用这个释放
printf("Give2 \n");
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
else
{
printf("no2 \n");
}
}
}
void app_main()
{
SemaphoreHandle=xSemaphoreCreateMutex();//计数型,最大5,初始5
// SemaphoreHandle=xSemaphoreCreateBinary();
xSemaphoreGive(SemaphoreHandle);//必须先用这个释放
vTaskSuspendAll();
xTaskCreate(
vTaskCode, // 任务函数
"task", // 名字
4096, // 分配内存
NULL, // 传参数
1, // 任务优先级
NULL); // 句柄
xTaskCreate(vTaskCode1, "task1",4096,NULL,2,NULL); // 句柄
xTaskCreate(vTaskCode2, "task2",4096,NULL,3,NULL); // 句柄
xTaskResumeAll() ;
}