Mutexy

Mutex je speciální typ binárního semaforu, který se využívá ke kontrole přístupů ke zdrojům, které sdílí dvě a více úloh. Slovo vychází ze složení MUTualEXclusion, což by se dalo přeložit jako vzájemné vyloučení. Vezměme si následující příklad:
 
MCU komunikuje s několika perifériemi prostřednictvím rozhraní SPI (například s microSD karta, ethernetový řadič a A/D převodník). Komunikace s každou takovou periférií a zpracování přijatých dat probíhá v samostatném vlákně. Představme si, že najednou v jednom okamžiku budou chtít využívat SPI rozhraní všechny tyto úlohy a začnou odesílat požadavky pře SPI. Logicky bude na výstupu z MCU brajgl (podle toho, který task se zrovna dostane ke slovu, bude chaoticky prováděno odesílání dat v každé chvíli právě tím taskem, který bude taskshedulerem spuštěn). Samozřejmě bude v důsledku této skutečnosti zařízení neschopné provozu. Aby se takové události vyloučily, existují ve FreeRTOS tzv. mutexy. Není to nic jiného, než sdílený semafor například mezi procesy, které SPI mohou využívat. Vždy před spuštěním komunikace po SPI je testována podmínka, zda je příslušný mutex dostupný (jinak řečeno, zda si ho nevzal jiný proces, který nyní provádí komunikaci přes SPI). Jestliže je mutex volný, příslušný proces ho "zabaví" a provede komunikaci. V průběhu provádění komunikace se přes podmínku na získání mutexu (xSemaphoreTake) žádný jiný proces k obsluze SPI nedostane, musí počkat, dokud předchozí proces komunikaci neukončí.
 
A nyní jak na to...
 
Nejdříve si vytvoříme příslušný semafor:
 
xSemaphoreHandle SPI_keeper = 0;