码迷,mamicode.com
首页 > 其他好文 > 详细

FreeRTOS中vSemaphoreCreateBinary和xSemaphoreCreateCounting(1, 0)的区别

时间:2015-02-14 20:07:53      阅读:950      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!