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互斥和二進制信號量。 –