How to use mutex and semaphores in a FreeRTOS and SDK2.0 Project

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to use mutex and semaphores in a FreeRTOS and SDK2.0 Project

How to use mutex and semaphores in a FreeRTOS and SDK2.0 Project

This document shows how to use a mutex and semaphores in order to synchronize two tasks in a FreeRTOS and SDK 2.0 project. For this example it is used SDK 2.0, TWR-K64F120M, and FreeRTOS.

If you want to know how to create a new SDK 2.0 with FreeRTOS project please check the below link: https://community.freescale.com/docs/DOC-330183

MUTEX EXAMPLE:

Introduction

A mutex provides mutual exclusion among tasks, when they access a shared resource.

When used for mutual exclusion the mutex acts like a token that is used to guard a resource. When a task wishes to access the resource it must first obtain ('take') the token. When it has finished with the resource it must 'give' the token back - allowing other tasks the opportunity to access the same resource. Mutexes cannot be used in interrupt service routines.

Mutexes use the same semaphore access API functions.

Writing a Mutex example code

The mutex example code is used to demonstrate how to use a mutex to synchronize two tasks. It creates a mutex and two tasks. Both tasks use PRINTF to print out messages. Each task will lock the mutex before printing and unlock it after printing to ensure that the outputs from tasks are not mixed together. According with this proposal it is necessary to follow the below steps.

  1. In main function, create a mutex using the xSemaphoreCreateMutex() API. This API creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines.

xMutex = xSemaphoreCreateMutex();

  1. Create two tasks with the same priority, these tasks will use PRINTF to print out messages.

       xTaskCreate(write_task_1,"write_task_1",configMINIMAL_STACK_SIZE,NULL,

                     task_PRIORITY, NULL);

       xTaskCreate(write_task_2,"write_task_2",configMINIMAL_STACK_SIZE,NULL,

                     task_PRIORITY, NULL);

  1. The two print tasks both use the PRINTF. If they used it in the same time, there would be conflicts, so a mutex is used to synchronize the two tasks. Each print task will try to lock the mutex before printing the message, using the macro xSemaphoreTake (SemaphoreHandle_t xSemaphore,TickType_t xTicksToWait); it will wait for the mutex as long as needed. Once the mutex is locked it prints the message and then unlocks the mutex  with the macro xSemaphoreGive (SemaphoreHandle_t xSemaphore) so that the other task can lock it. This process is repeated indefinitely.

static void write_task_1(void *pvParameters)

{

    while (1)

    {

xSemaphoreTake(xMutex, portMAX_DELAY);

        PRINTF("Hello, this is the |");

        taskYIELD();

        PRINTF("first task \r\n");

xSemaphoreGive(xMutex);

        taskYIELD();

    }

}

static void write_task_2(void *pvParameters)

{

while (1)

{

xSemaphoreTake(xMutex, portMAX_DELAY);

PRINTF("And now this is the |");

taskYIELD();

PRINTF(" second task\r\n");

xSemaphoreGive(xMutex);

taskYIELD();

}

}

  1. At this point you can build and debug the example.

Complete Code

/* Kernel includes. */

#include "FreeRTOS.h"

#include "task.h"

#include "queue.h"

#include "timers.h"

#include "semphr.h"

/* Freescale includes. */

#include "fsl_device_registers.h"

#include "fsl_debug_console.h"

#include "board.h"

#include "pin_mux.h"

#include "clock_config.h"

/*******************************************************************************

* Definitions

******************************************************************************/

SemaphoreHandle_t xMutex;

/*******************************************************************************

* Prototypes

******************************************************************************/

static void write_task_1(void *pvParameters);

static void write_task_2(void *pvParameters);

/*******************************************************************************

* Code

******************************************************************************/

/*!

* @brief Main function

*/

int main(void)

{

xMutex = xSemaphoreCreateMutex();

BOARD_InitPins();

BOARD_BootClockRUN();

BOARD_InitDebugConsole();

xTaskCreate(write_task_1, "WRITE_TASK_1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);

xTaskCreate(write_task_2, "WRITE_TASK_2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);

/* Start scheduling. */

vTaskStartScheduler();

for (;;)

;

}

/*!

* @brief Write Task 1 function

*/

static void write_task_1(void *pvParameters)

{

while (1)

{

xSemaphoreTake(xMutex, portMAX_DELAY);

PRINTF("Hello, this is the ");

taskYIELD();

PRINTF("first task \r\n");

xSemaphoreGive(xMutex);

taskYIELD();

}

}

/*!

* @brief Write Task 2 function

*/

static void write_task_2(void *pvParameters)

{

while (1)

{

xSemaphoreTake(xMutex, portMAX_DELAY);

PRINTF("And now this is the ");

taskYIELD();

PRINTF(" second task\r\n");

xSemaphoreGive(xMutex);

taskYIELD();

}

}

SEMAPHORE EXAMPLE:

Introduction

Binary semaphores and mutexes are very similar but have some subtle differences: Mutexes include a priority inheritance mechanism, binary semaphores do not. This makes binary semaphores the better choice for implementing synchronisation (between tasks or between tasks and an interrupt), and mutexes the better choice for implementing simple mutual exclusion.

A semaphore can be used in order to control the access to a particular resource that consists of a finite number of instances.

Writing a Semaphore example code

After install SDK 2.0 you can find a semaphore example at the path: <SDK_install_path>\SDK_2.0_xxx\boards\<your_name>\rtos_examples\freertos_sem

The example uses four tasks. One producer_task and three consumer_tasks. The producer_task starts by creating of two semaphores (xSemaphore_producer and xSemaphore_consumer). These semaphores control access to virtual item. The synchronization is based on bilateral rendezvous pattern. Both of consumer and producer must be prepared to enable transaction.

Here’s the API (copied from the FreeRTOS website):

MODULES

xSemaphoreCreateBinary

SemaphoreHandle_t xSemaphoreCreateBinary( void );

Creates a binary semaphore, and returns a handle by which the semaphore can be referenced.

xSemaphoreCreateBinaryStatic

SemaphoreHandle_t xSemaphoreCreateBinaryStatic(

                          StaticSemaphore_t *pxSemaphoreBuffer );

Creates a binary semaphore, and returns a handle by which the semaphore can be referenced.

xSemaphoreCreateCounting

SemaphoreHandle_t xSemaphoreCreateCounting(

                                            UBaseType_t uxMaxCount,

UBaseType_t uxInitialCount);

Creates a counting semaphore and returns a handle by which the newly created semaphore can be referenced.

xSemaphoreCreateCountingStatic

SemaphoreHandle_t xSemaphoreCreateCountingStatic(

                                 UBaseType_t uxMaxCount,

                                 UBaseType_t uxInitialCount

StaticSemaphore_t pxSempahoreBuffer );

Creates a counting semaphore and returns a handle by which the newly created semaphore can be referenced.

xSemaphoreCreateMutex

SemaphoreHandle_t xSemaphoreCreateMutex( void )

Creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines.

xSemaphoreCreateMutexStatic

SemaphoreHandle_t xSemaphoreCreateMutexStatic(

                            StaticSemaphore_t *pxMutexBuffer );

Creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines.

xSemaphoreCreateRecursiveMutex

SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )

Creates a recursive mutex, and returns a handle by which the mutex can be referenced. Recursive mutexes cannot be used in interrupt service routines. configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for xSemaphoreCreateRecursiveMutex() to be available.

xSemaphoreCreateRecursiveMutexStatic

SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic(

StaticSemaphore_t *pxMutexBuffer )

Creates a recursive mutex, and returns a handle by which the mutex can be referenced. Recursive mutexes cannot be used in interrupt service routines. configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for xSemaphoreCreateRecursiveMutexStatic() to be available.

vSemaphoreDelete

void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

Deletes a semaphore, including mutex type semaphores and recursive semaphores.

Do not delete a semaphore that has tasks blocked on it (tasks that are in the Blocked state waiting for the semaphore to become available).

xSemaphoreGetMutexHolder

TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );

Return the handle of the task that holds the mutex specified by the function parameter, if any.

xSemaphoreGetMutexHolder() can be used reliably to determine if the calling task is the mutex holder, but cannot be used reliably if the mutex is held by any task other than the calling task.

xSemaphoreTake

xSemaphoreTake( SemaphoreHandle_t xSemaphore,

                 TickType_t xTicksToWait );

Macro to obtain a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or xSemaphoreCreateCounting().

xSemaphoreTakeFromISR

xSemaphoreTakeFromISR(

        SemaphoreHandle_t xSemaphore,

        signed BaseType_t *pxHigherPriorityTaskWoken )

A version of xSemaphoreTake() that can be called from an ISR. Unlike xSemaphoreTake(), xSemaphoreTakeFromISR() does not permit a block time to be specified.

xSemaphoreTakeRecursive

xSemaphoreTakeRecursive( SemaphoreHandle_t xMutex,

                         TickType_t xTicksToWait );

Macro to recursively obtain, or 'take', a mutex type semaphore. The mutex must have previously been created using a call to xSemaphoreCreateRecursiveMutex();

configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this macro to be available.

xSemaphoreGive

xSemaphoreGive( SemaphoreHandle_t xSemaphore );

Macro to release a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or xSemaphoreCreateCounting(), and obtained using sSemaphoreTake().

xSemaphoreGiveRecursive

xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )

Macro to recursively release, or 'give', a mutex type semaphore. The mutex must have previously been created using a call to xSemaphoreCreateRecursiveMutex();

configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this macro to be available.

xSemaphoreGiveFromISR

xSemaphoreGiveFromISR(

        SemaphoreHandle_t xSemaphore,

        signed BaseType_t *pxHigherPriorityTaskWoken)

Macro to release a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting().

Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) must not be used with this macro.

uxSemaphoreGetCount

UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );

Returns the count of a semaphore.

Enjoy!!!

%3CLINGO-SUB%20id%3D%22lingo-sub-1114196%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EHow%20to%20use%20mutex%20and%20semaphores%20in%20a%20FreeRTOS%20and%20SDK2.0%20Project%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1114196%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3EThis%20document%20shows%20how%20to%20use%20a%20mutex%20and%20semaphores%20in%20order%20to%20synchronize%20two%20tasks%20in%20a%20FreeRTOS%20and%20SDK%202.0%20project.%20For%20this%20example%20it%20is%20used%20SDK%202.0%2C%20TWR-K64F120M%2C%20and%20FreeRTOS.%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2011.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSPAN%3EIf%20you%20want%20to%20know%20how%20to%20create%20a%20new%20SDK%202.0%20with%20FreeRTOS%20project%20please%20check%20the%20below%20link%3A%20%3C%2FSPAN%3E%3CA%20class%3D%22jive-link-external-small%22%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Fexternal-link.jspa%3Furl%3Dhttps%253A%252F%252Fcommunity.freescale.com%252Fdocs%252FDOC-330183%22%20target%3D%22_blank%22%3Ehttps%3A%2F%2Fcommunity.freescale.com%2Fdocs%2FDOC-330183%3C%2FA%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%22%3E%3CSTRONG%3EMUTEX%20EXAMPLE%3A%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%22%3E%3CSTRONG%3EIntroduction%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3EA%20mutex%20provides%20mutual%20exclusion%20among%20tasks%2C%20when%20they%20access%20a%20shared%20resource.%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2011.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EWhen%20used%20for%20mutual%20exclusion%20the%20mutex%20acts%20like%20a%20token%20that%20is%20used%20to%20guard%20a%20resource.%20When%20a%20task%20wishes%20to%20access%20the%20resource%20it%20must%20first%20obtain%20('take')%20the%20token.%20When%20it%20has%20finished%20with%20the%20resource%20it%20must%20'give'%20the%20token%20back%20-%20allowing%20other%20tasks%20the%20opportunity%20to%20access%20the%20same%20resource.%20Mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2011.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMutexes%20use%20the%20same%20semaphore%20access%20API%20functions.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3EWriting%20a%20Mutex%20example%20code%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3EThe%20mutex%20example%20code%20is%20used%20to%20demonstrate%20how%20to%20use%20a%20mutex%20to%20synchronize%20two%20tasks.%20It%20creates%20a%20mutex%20and%20two%20tasks.%20Both%20tasks%20use%20PRINTF%20to%20print%20out%20messages.%20Each%20task%20will%20lock%20the%20mutex%20before%20printing%20and%20unlock%20it%20after%20printing%20to%20ensure%20that%20the%20outputs%20from%20tasks%20are%20not%20mixed%20together.%20According%20with%20this%20proposal%20it%20is%20necessary%20to%20follow%20the%20below%20steps.%3C%2FP%3E%3CP%3E%3C%2FP%3E%3COL%20style%3D%22list-style-type%3A%20decimal%3B%22%3E%3CLI%3EIn%20main%20function%2C%20create%20a%20mutex%20using%20the%20xSemaphoreCreateMutex()%20API.%20This%20API%20creates%20a%20mutex%2C%20and%20returns%20a%20handle%20by%20which%20the%20created%20mutex%20can%20be%20referenced.%20Mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3ExMutex%20%3D%20xSemaphoreCreateMutex()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3COL%20style%3D%22list-style-type%3A%20decimal%3B%22%3E%3CLI%3ECreate%20two%20tasks%20with%20the%20same%20priority%2C%20these%20tasks%20will%20use%20PRINTF%20to%20print%20out%20messages.%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20xTaskCreate(write_task_1%2C%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22write_task_1%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%2CconfigMINIMAL_STACK_SIZE%2CNULL%2C%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%3CSPAN%20style%3D%22background%3A%20lightgrey%3B%22%3Etask_PRIORITY%3C%2FSPAN%3E%2C%20NULL)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20xTaskCreate(write_task_2%2C%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22write_task_2%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%2CconfigMINIMAL_STACK_SIZE%2CNULL%2C%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%3CSPAN%20style%3D%22background%3A%20lightgrey%3B%22%3Etask_PRIORITY%3C%2FSPAN%3E%2C%20NULL)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3COL%20style%3D%22list-style-type%3A%20decimal%3B%22%3E%3CLI%3EThe%20two%20print%20tasks%20both%20use%20the%20PRINTF.%20If%20they%20used%20it%20in%20the%20same%20time%2C%20there%20would%20be%20conflicts%2C%20so%20a%20mutex%20is%20used%20to%20synchronize%20the%20two%20tasks.%20Each%20print%20task%20will%20try%20to%20lock%20the%20mutex%20before%20printing%20the%20message%2C%20using%20the%20macro%20%3CSTRONG%3ExSemaphoreTake%20(SemaphoreHandle_t%20xSemaphore%2CTickType_t%20xTicksToWait)%3C%2FSTRONG%3E%3B%20it%20will%20wait%20for%20the%20mutex%20as%20long%20as%20needed.%20Once%20the%20mutex%20is%20locked%20it%20prints%20the%20message%20and%20then%20unlocks%20the%20mutex%26nbsp%3B%20with%20the%20macro%20%3CSTRONG%3ExSemaphoreGive%20(SemaphoreHandle_t%20xSemaphore)%20%3C%2FSTRONG%3Eso%20that%20the%20other%20task%20can%20lock%20it.%20This%20process%20is%20repeated%20indefinitely.%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_1%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Ewhile%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20(1)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreTake(xMutex%2C%20portMAX_DELAY)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22Hello%2C%20this%20is%20the%20%7C%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22first%20task%20%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreGive(xMutex)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-left%3A%20.25in%3B%20margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_2%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Ewhile%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20(1)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreTake(xMutex%2C%20portMAX_DELAY)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22And%20now%20this%20is%20the%20%7C%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22%20second%20task%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreGive(xMutex)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%3COL%20style%3D%22list-style-type%3A%20decimal%3B%22%3E%3CLI%3EAt%20this%20point%20you%20can%20build%20and%20debug%20the%20example.%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%22%3E%3CSTRONG%3EComplete%20Code%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSTRONG%3E%20%3C%2FSTRONG%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*%20Kernel%20includes.%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22FreeRTOS.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22task.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22queue.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22timers.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22semphr.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*%20%3CSPAN%20style%3D%22text-decoration%3A%20underline%3B%22%3EFreescale%3C%2FSPAN%3E%20includes.%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22fsl_device_registers.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22fsl_debug_console.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22board.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22pin_mux.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3E%23include%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22clock_config.h%22%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20Definitions%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20******************************************************************************%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%23005032%3B%22%3ESemaphoreHandle_t%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xMutex%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20Prototypes%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20******************************************************************************%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_1%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_2%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20Code%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20******************************************************************************%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*!%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20%40brief%20Main%20function%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Eint%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Emain%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xMutex%20%3D%20xSemaphoreCreateMutex()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20BOARD_InitPins()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20BOARD_BootClockRUN()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20BOARD_InitDebugConsole()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xTaskCreate(write_task_1%2C%20%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22WRITE_TASK_1%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%2C%20configMINIMAL_STACK_SIZE%2C%20NULL%2C%20tskIDLE_PRIORITY%20%2B%201%2C%20NULL)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xTaskCreate(write_task_2%2C%20%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22WRITE_TASK_2%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%2C%20configMINIMAL_STACK_SIZE%2C%20NULL%2C%20tskIDLE_PRIORITY%20%2B%201%2C%20NULL)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*%20Start%20scheduling.%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20vTaskStartScheduler()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Efor%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20(%3B%3B)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*!%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20%40brief%20Write%20Task%201%20function%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_1%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Ewhile%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20(1)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreTake(xMutex%2C%20portMAX_DELAY)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22Hello%2C%20this%20is%20the%20%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22first%20task%20%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreGive(xMutex)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%2F*!%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%20%40brief%20Write%20Task%202%20function%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%233f7f5f%3B%22%3E%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Estatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%3CSTRONG%3Ewrite_task_2%3C%2FSTRONG%3E(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Evoid%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20*pvParameters)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%22%3E%3CSTRONG%3Ewhile%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20(1)%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreTake(xMutex%2C%20portMAX_DELAY)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22And%20now%20this%20is%20the%20%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20PRINTF(%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20%232a00ff%3B%22%3E%22%20second%20task%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20xSemaphoreGive(xMutex)%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20taskYIELD()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%20%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2010.0pt%3B%20font-family%3A%20Consolas%3B%20color%3A%20black%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSTRONG%3E%20%3C%2FSTRONG%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%22%3E%3CSTRONG%3ESEMAPHORE%20EXAMPLE%3A%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3EIntroduction%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2011.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EBinary%20semaphores%20and%20mutexes%20are%20very%20similar%20but%20have%20some%20subtle%20differences%3A%20Mutexes%20include%20a%20priority%20inheritance%20mechanism%2C%20binary%20semaphores%20do%20not.%20This%20makes%20binary%20semaphores%20the%20better%20choice%20for%20implementing%20synchronisation%20(between%20tasks%20or%20between%20tasks%20and%20an%20interrupt)%2C%20and%20mutexes%20the%20better%20choice%20for%20implementing%20simple%20mutual%20exclusion.%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2011.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EA%20semaphore%20can%20be%20used%20in%20order%20to%20control%20the%20access%20to%20a%20particular%20resource%20that%20consists%20of%20a%20finite%20number%20of%20instances.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%20background%3A%20white%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%2014.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3EWriting%20a%20Semaphore%20example%20code%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3EAfter%20install%20SDK%202.0%20you%20can%20find%20a%20semaphore%20example%20at%20the%20path%3A%20%3CSDK_INSTALL_PATH%3E%5CSDK_2.0_xxx%5Cboards%5C%3CYOUR_NAME%3E%5Crtos_examples%5Cfreertos_sem%3C%2FYOUR_NAME%3E%3C%2FSDK_INSTALL_PATH%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3EThe%20example%20uses%20four%20tasks.%20One%20producer_task%20and%20three%20consumer_tasks.%20The%20producer_task%20starts%20by%20creating%20of%20two%20semaphores%20(xSemaphore_producer%20and%20xSemaphore_consumer).%20These%20semaphores%20control%20access%20to%20virtual%20item.%20The%20synchronization%20is%20based%20on%20bilateral%20rendezvous%20pattern.%20Both%20of%20consumer%20and%20producer%20must%20be%20prepared%20to%20enable%20transaction.%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%20text-align%3A%20justify%3B%22%3EHere%E2%80%99s%20the%20API%20(copied%20from%20the%20FreeRTOS%20website)%3A%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CTABLE%20border%3D%221%22%20cellpadding%3D%220%22%20cellspacing%3D%220%22%20style%3D%22table-layout%3A%20fixed%3B%20border%3A%20none%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%3E%3CTBODY%3E%3CTR%3E%3CTD%20colspan%3D%222%22%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.5pt%3B%20background%3A%20white%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22623%22%3E%3CP%20align%3D%22center%22%20style%3D%22text-align%3A%20center%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3EMODULES%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateBinary%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateBinary(%20void%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20binary%20semaphore%2C%20and%20returns%20a%20handle%20by%20which%20the%20semaphore%20can%20be%20referenced.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateBinaryStatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateBinaryStatic(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20StaticSemaphore_t%20*pxSemaphoreBuffer%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20binary%20semaphore%2C%20and%20returns%20a%20handle%20by%20which%20the%20semaphore%20can%20be%20referenced.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateCounting%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateCounting(%20%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20UBaseType_t%20uxMaxCount%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%20UBaseType_t%20uxInitialCount)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20counting%20semaphore%20and%20returns%20a%20handle%20by%20which%20the%20newly%20created%20semaphore%20can%20be%20referenced.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateCountingStatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateCountingStatic(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20UBaseType_t%20uxMaxCount%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20UBaseType_t%20uxInitialCount%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%20StaticSemaphore_t%20pxSempahoreBuffer%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20counting%20semaphore%20and%20returns%20a%20handle%20by%20which%20the%20newly%20created%20semaphore%20can%20be%20referenced.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateMutex%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateMutex(%20void%20)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20mutex%2C%20and%20returns%20a%20handle%20by%20which%20the%20created%20mutex%20can%20be%20referenced.%20Mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateMutexStatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateMutexStatic(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20StaticSemaphore_t%20*pxMutexBuffer%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20mutex%2C%20and%20returns%20a%20handle%20by%20which%20the%20created%20mutex%20can%20be%20referenced.%20Mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateRecursiveMutex%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateRecursiveMutex(%20void%20)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20recursive%20mutex%2C%20and%20returns%20a%20handle%20by%20which%20the%20mutex%20can%20be%20referenced.%20Recursive%20mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%20configUSE_RECURSIVE_MUTEXES%20must%20be%20set%20to%201%20in%20FreeRTOSConfig.h%20for%20xSemaphoreCreateRecursiveMutex()%20to%20be%20available.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreCreateRecursiveMutexStatic%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ESemaphoreHandle_t%20xSemaphoreCreateRecursiveMutexStatic(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%20StaticSemaphore_t%20*pxMutexBuffer%20)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ECreates%20a%20recursive%20mutex%2C%20and%20returns%20a%20handle%20by%20which%20the%20mutex%20can%20be%20referenced.%20Recursive%20mutexes%20cannot%20be%20used%20in%20interrupt%20service%20routines.%20configUSE_RECURSIVE_MUTEXES%20must%20be%20set%20to%201%20in%20FreeRTOSConfig.h%20for%20xSemaphoreCreateRecursiveMutexStatic()%20to%20be%20available.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3EvSemaphoreDelete%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3Evoid%20vSemaphoreDelete(%20SemaphoreHandle_t%20xSemaphore%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EDeletes%20a%20semaphore%2C%20including%20mutex%20type%20semaphores%20and%20recursive%20semaphores.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EDo%20not%20delete%20a%20semaphore%20that%20has%20tasks%20blocked%20on%20it%20(tasks%20that%20are%20in%20the%20Blocked%20state%20waiting%20for%20the%20semaphore%20to%20become%20available).%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreGetMutexHolder%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ETaskHandle_t%20xSemaphoreGetMutexHolder(%20SemaphoreHandle_t%20xMutex%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EReturn%20the%20handle%20of%20the%20task%20that%20holds%20the%20mutex%20specified%20by%20the%20function%20parameter%2C%20if%20any.%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3ExSemaphoreGetMutexHolder()%20can%20be%20used%20reliably%20to%20determine%20if%20the%20calling%20task%20is%20the%20mutex%20holder%2C%20but%20cannot%20be%20used%20reliably%20if%20the%20mutex%20is%20held%20by%20any%20task%20other%20than%20the%20calling%20task.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreTake%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreTake(%20SemaphoreHandle_t%20xSemaphore%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20TickType_t%20xTicksToWait%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMacro%20to%20obtain%20a%20semaphore.%20The%20semaphore%20must%20have%20previously%20been%20created%20with%20a%20call%20to%20xSemaphoreCreateBinary()%2C%20xSemaphoreCreateMutex()%20or%20xSemaphoreCreateCounting().%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreTakeFromISR%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreTakeFromISR(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20SemaphoreHandle_t%20xSemaphore%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20signed%20BaseType_t%20*pxHigherPriorityTaskWoken%20)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EA%20version%20of%20xSemaphoreTake()%20that%20can%20be%20called%20from%20an%20ISR.%20Unlike%20xSemaphoreTake()%2C%20xSemaphoreTakeFromISR()%20does%20not%20permit%20a%20block%20time%20to%20be%20specified.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreTakeRecursive%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreTakeRecursive(%20SemaphoreHandle_t%20xMutex%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20TickType_t%20xTicksToWait%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMacro%20to%20recursively%20obtain%2C%20or%20'take'%2C%20a%20mutex%20type%20semaphore.%20The%20mutex%20must%20have%20previously%20been%20created%20using%20a%20call%20to%20xSemaphoreCreateRecursiveMutex()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EconfigUSE_RECURSIVE_MUTEXES%20must%20be%20set%20to%201%20in%20FreeRTOSConfig.h%20for%20this%20macro%20to%20be%20available.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreGive%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreGive(%20SemaphoreHandle_t%20xSemaphore%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMacro%20to%20release%20a%20semaphore.%20The%20semaphore%20must%20have%20previously%20been%20created%20with%20a%20call%20to%20xSemaphoreCreateBinary()%2C%20xSemaphoreCreateMutex()%20or%20xSemaphoreCreateCounting()%2C%20and%20obtained%20using%20sSemaphoreTake().%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreGiveRecursive%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreGiveRecursive(%20SemaphoreHandle_t%20xMutex%20)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMacro%20to%20recursively%20release%2C%20or%20'give'%2C%20a%20mutex%20type%20semaphore.%20The%20mutex%20must%20have%20previously%20been%20created%20using%20a%20call%20to%20xSemaphoreCreateRecursiveMutex()%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EconfigUSE_RECURSIVE_MUTEXES%20must%20be%20set%20to%201%20in%20FreeRTOSConfig.h%20for%20this%20macro%20to%20be%20available.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3ExSemaphoreGiveFromISR%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3ExSemaphoreGiveFromISR(%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20SemaphoreHandle_t%20xSemaphore%2C%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20signed%20BaseType_t%20*pxHigherPriorityTaskWoken)%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMacro%20to%20release%20a%20semaphore.%20The%20semaphore%20must%20have%20previously%20been%20created%20with%20a%20call%20to%20xSemaphoreCreateBinary()%20or%20xSemaphoreCreateCounting().%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EMutex%20type%20semaphores%20(those%20created%20using%20a%20call%20to%20xSemaphoreCreateMutex())%20must%20not%20be%20used%20with%20this%20macro.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%20style%3D%22border-top%3A%20none%3B%20border-left%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20border-right%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22198%22%3E%3CP%20style%3D%22margin-bottom%3A%20.0001pt%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%22%3E%3CSTRONG%3EuxSemaphoreGetCount%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3CTD%20style%3D%22border%3A%20none%3B%20border-bottom%3A%20solid%20%23666666%201.0pt%3B%20background%3A%20%23CCCCCC%3B%20padding%3A%200%205.4pt%200%205.4pt%3B%22%20valign%3D%22top%22%20width%3D%22425%22%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3E%3CSTRONG%3EUBaseType_t%20uxSemaphoreGetCount(%20SemaphoreHandle_t%20xSemaphore%20)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22text-align%3A%20justify%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208.0pt%3B%20font-family%3A%20'Calibri'%2Csans-serif%3B%22%3EReturns%20the%20count%20of%20a%20semaphore.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3EEnjoy!!!%3C%2FP%3E%3C%2FLINGO-BODY%3E
No ratings
Version history
Last update:
‎06-26-2016 06:23 PM
Updated by: