2016-06-28 17 views
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); 
    } 
} 

Über Code ist der, den ich für beide binäre Semaphore und Mutex verwenden. Der einzige Unterschied ist für binäre Semaphor Ich schreibe "xSemaphoreCreateBinary (Xsemaphore);" in Haupt und für Mutex xSemaphoreCreateMutex (Xsemaphore) in Haupt.Unterscheiden zwischen binären Semaphor und Mutex mit dem gleichen Code

Nach der definetion

„Eine Semaphore (Mutex) von der Aufgabe beschäftigt ist nur für diese Aufgabe und die Semaphore (Binary) von einer Aufgabe erstellt gegeben werden kann durch eine der Aufgaben gegeben werden“

Aber beide Codes (dh für binäre Semaphore und Mutex) geben die gleiche Ausgabe.

Antwort

0

Mutexe werden zur Steuerung des exklusiven Zugriffs auf Ressourcen/Daten verwendet. Wenn Sie einen Mutex verwenden, der die Ressource/Daten schützt, müssen Sie sie nach Beendigung des Vorgangs zurückgeben, andernfalls werden Sie die Ressource dauerhaft blockieren. Mutexe ermöglichen auch Prioritätsvererbung.

Binäre Semaphore auf der anderen Seite werden für Aufgabensynchronisationszwecke verwendet. Du gibst den Semaphor nicht zurück, wenn du ihn erst einmal genommen hast.

Mit Blick auf Ihren Code oben denke ich, dass der binäre Semaphore der Weg zu gehen ist.

+0

Danke, Das Problem war, als ich die Give-Funktion mit einem Mutex von einer anderen Aufgabe die Mutex freigegeben wurde. Später erkannte ich die Implementierungsleveldifferenz btw mutex und binary semaphore. –

Verwandte Themen