标签:freertos openrtos vsemaphorecreatebinary xsemaphorecreatecounting 信号量
OpenRTOS V7.4.2
硬件平台:Cortex-M4
要使用信号量达到两个任务先后执行,比如任务A执行初始化以后,给出信号量消息,然后任务B才运行。
void task_A()
{
xSemaphoreGive(semphr);
}
void task_B()
{
xSemaphoreTake( semphr, portMAX_DELAY );
for(;;)
{
printf("task B\n");
}
}
如果使用vSemaphoreCreateBinary()创建二值信号量。
vSemaphoreCreateBinary(semphr);
如果使用xSemaphoreCreateCounting创建计数信号量。
semphr = xSemaphoreCreateCounting(1, 0);
前者是无法保证任务A执行前任务B保持阻塞的,因为二值信号量初始化以后信号量的状态是无法确定的,所以经常会出现各种混乱的情况。即使把任务A里面Give()信号量的操作注释掉,任务B的打印语句仍然可以正常输出。
后者却可以保证任务A在任务B之前执行。因为计数信号量创建时给定了初始值为0,任务B会阻塞等待任务A给出信号量。
本文出自 “7580503” 博客,请务必保留此出处http://7590503.blog.51cto.com/7580503/1614483
FreeRTOS中vSemaphoreCreateBinary和xSemaphoreCreateCounting(1, 0)的区别
标签:freertos openrtos vsemaphorecreatebinary xsemaphorecreatecounting 信号量
原文地址:http://7590503.blog.51cto.com/7580503/1614483