嵌入式学习小组
直播中

于扬

7年用户 203经验值
私信 关注

如何使用二进制信号量

如何使用二进制信号量。
如何去判断二进制信号量 0和1.
看来书写的是空的时候为0.满的时候为1,但是如何去判断0和1。

回帖(5)

晏玉屏

2020-6-15 13:55:45
不加私人QQ哦,我自己水平也很菜,就简单说一下我自己的理解吧,也不知道对不对,你就当个参考好了。
假设我们有一个数组,Array[10] = {0},
static SemaphoreHandle_t  xSemaphore = NULL;
Task1函数
{
    while(1)
    {
        xSemaphoreTake(xSemaphore, portMAX_DELAY);
        对数组进行操作(写数据);
        xSemaphoreGive(xSemaphore);
        taskYIELD();
    }
        
}
Task2函数
{
    while(1)
    {
        xSemaphoreTake(xSemaphore, portMAX_DELAY);
        对数组进行操作(写数据);
        xSemaphoreGive( xSemaphore );
        taskYIELD();
    }   
}
上面对信号量的获取和释放都用不涉及到判断信号量0和1的。
举报

李劲草

2020-6-15 14:10:59
实际使用过程中我们不需要去判断0和1吧,只需要在访问资源时候先Take一次信号量,这时相当是把它清空,访问完资源后在give回去就好了呀,感觉和互斥信号量是一样的原理
举报

李开心

2020-6-15 14:30:50
想利用二值信号量来达到一个同步任务的功能。
多个函数给队列写数据,多个同时写怕冲突,所以想用个变量,一个人任务给队列写数据时锁住变量,写好后释放变量。只有变量是释放的状态时,下一个任务才能给队列写数据。
所以想用二值信号量来实现这个功能,但是不知道怎么去实现,方便加个QQ指导一下嘛!嘻嘻
举报

赵淑洁

2020-6-15 14:42:06
二值信号量是一个没有存储区的队列,用队列是否为空来表示二值信号量,而队列是否为空可以通过队列结构体中的成员变量uxMessagesWaiting来判定,这个成员变量具体含义为队列中的消息数,为1表示二值信号量有效,为0表示无效
举报

更多回帖

发帖
×
20
完善资料,
赚取积分