使用相同的代码

时间:2016-06-28 09:34:32

标签: mutex semaphore freertos

void forward(void *pvparam)
{
    while(1)
    {
        if(xSemaphoreTake(xSemaphore,1000)==pdTRUE)
        {
            UART0_SendStr("Frwd took it\n");
        }
        else
        { 
            UART0_SendStr("Frwd couldn't take it\n");
        }
        vTaskDelay(1000);
    }
}

void back(void *pvparam)
{
    vTaskDelay(100);
    while(1)
    {
        if(xSemaphoreGive(xSemaphore)==pdTRUE)
        {
            UART0_SendStr("Back Gave it:MF\n");
        }
        else
        { 
            UART0_SendStr("Back couldn't give it:MS\n");
        }
        vTaskDelay(1000);
    }
}

以上代码是我用于Binary信号量和Mutex的代码。 唯一的区别是我写的二进制信号量" xSemaphoreCreateBinary(xsemaphore);"在主要和 对于互斥 主要的xSemaphoreCreateMutex(xsemaphore)。

根据定义

  

"任务占用的信号量(Mutex)只能由该任务给出,任务创建的信号量(二进制)可以由任何任务给出"

但是这两个代码(即二进制信号量和互斥量)都给出了相同的输出。

1 个答案:

答案 0 :(得分:0)

互斥锁用于控制对资源/数据的独占访问。如果使用保护资源/数据的互斥锁,则必须在完成后将其还原,否则将永久阻止资源。互斥锁还允许优先级继承。

另一方面,

二进制信号量用于任务同步目的。一旦你接受了信号量,你就不会给它一个信号量。

查看上面的代码,我认为Binary Semaphore是可行的方法。