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)只能由该任务给出,任务创建的信号量(二进制)可以由任何任务给出"
但是这两个代码(即二进制信号量和互斥量)都给出了相同的输出。
答案 0 :(得分:0)
互斥锁用于控制对资源/数据的独占访问。如果使用保护资源/数据的互斥锁,则必须在完成后将其还原,否则将永久阻止资源。互斥锁还允许优先级继承。
另一方面,二进制信号量用于任务同步目的。一旦你接受了信号量,你就不会给它一个信号量。
查看上面的代码,我认为Binary Semaphore是可行的方法。