0
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);
}
}
上面的代码是我用于二进制信号量和互斥量的代码。 唯一的区别是二进制信号我写“xSemaphoreCreateBinary(xsemaphore);”在主要和 为互斥 xSemaphoreCreateMutex(xsemaphore)在主。区分使用相同代码的二进制信号量和互斥量
按照definetion
“的任务占用的信号量(互斥)只能由一个任务创建的任务和信号量(二进制)被赋予可以由任何任务的给予”
但是这两个代码(即二进制信号量和互斥量)给出相同的输出。
谢谢,问题是当我使用互斥量被释放的另一个任务的互斥量给函数。后来我意识到了执行水平差异BTW互斥和二进制信号量。 –