Free RTOS-11信号量2计数信号量
新建5个车位,还有5个空位,有空位就能开进去。运行自动减1。
SemaphoreHandle_t SemaphoreHandle;//互斥锁和二进制信号量都由 SemaphoreHandle_t 类型的变量引用
int cont=0;
void vTaskCode(void *pvParam)//任务
{
int ubit=0;
BaseType_t BaseType;
while (1)
{
ubit=uxSemaphoreGetCount(SemaphoreHandle);//返回信号量计数。
printf("TASK %d\n",ubit);
BaseType =xSemaphoreTake(SemaphoreHandle,0);//立即
if(BaseType== pdTRUE)
{
printf("ok \n");
}
else
{
printf("no \n");
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vTaskCode1(void *pvParam)//任务
{
while(1)
{
vTaskDelay(pdMS_TO_TICKS(6000));
xSemaphoreGive(SemaphoreHandle);//必须先用这个释放
printf("out \n");
}
}
void app_main()
{
SemaphoreHandle=xSemaphoreCreateCounting(5,5);//计数型,最大5,初始5
xSemaphoreGive(SemaphoreHandle);//必须先用这个释放
xTaskCreate(
vTaskCode, // 任务函数
"task", // 名字
4096, // 分配内存
NULL, // 传参数
1, // 任务优先级
NULL); // 句柄
xTaskCreate(
vTaskCode1, // 任务函数
"task1", // 名字
4096, // 分配内存
NULL, // 传参数
1, // 任务优先级
NULL); // 句柄
}
更多推荐


所有评论(0)