FreeRTOS queue set, event flag group | FreeRTOS 11

Table of contents

illustrate:

1. Queue set

1.1. Introduction to queue sets

1.2. The role of queue sets

2. API functions related to queue sets

2.1. Create queue set function

2.2. Add queue function to queue set

2.3. Queue set removal queue function

2.4. Get a valid queue in the queue set

3. Event flag group

3.1. What is an event flag group?

3.2. Characteristics of event flag group

3.3. Event flag group data type

3.4. Differences between event flag groups, queues, and semaphores

4. API functions related to event flag group

4.1. Commonly used API functions

4.2. Dynamically create event flag group function

4.3. Clear event flag function

4.4. Set event flag function

4.5. Waiting event flag function


illustrate:

About the content:

    1) The following contents are mostly conceptual understanding and step analysis

    2) There is no personal sample code yet. The official sample code of FreeRTOS is used.

    3) If you want to transplant the code for testing, please look elsewhere. There is no personal sample code for testing in the following content.

About others:

    1) Operating system: win 10

    2) Platform: keil 5 mdk

    3) Language: c language

    4) Board: STM32 series transplanted to FreeRTOS
 

1. Queue set

1.1. Introduction to queue sets

        A queue only allows the information transferred between tasks to be of the same data type. If you need to transfer information of different data types between tasks , you can use a queue set.

1.2. The role of queue sets

        Used to monitor multiple queues or semaphores. No matter which message arrives, the task can exit the blocking state.

 

2. API functions related to queue sets

2.1. Create queue set function

Function name: QueueSetHandle_t xQueueCreateSet (const UbaseType_t uxEventQueueLength)

Function: Create a queue set

Parameter meaning:

Parameter name: uxEventQueueLength, meaning: the number of queues that the queue set can accommodate

return value:

Return, NULL, meaning: Queue set creation failed

Return, other values, the queue set is created successfully, and the queue set handle is returned.

2.2. Add queue function to queue set

Function name: BaseType_t xQueueAddToSet (QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);

Function: Add a queue to the queue set

Parameter meaning:

Parameter name: xQueuOrSemaphore, meaning: queue handle to be added

Parameter name: xQueueSet, meaning: queue set

return value:

Return, pdPASS, meaning: Queue set added queue successfully

Return, pdFALL, meaning: Failed to add queue to queue set

Note: When a queue is added to a queue set, there must be no valid information in the queue.

2.3. Queue set removal queue function

Function name: BaseType_t xQueueRemoveFromSet (QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);

Function: Queue set removes the queue

Parameter meaning:

Parameter name: xQueuOrSemaphore, meaning: queue handle to be removed

Parameter name: xQueueSet, meaning: queue set

return value:

Return, pdPASS, meaning: Queue set removed queue successfully

Return, pdFALL, meaning: Failed to remove queue from queue set

Note: Before the queue is removed from the queue set, there must be no valid information in the queue.

2.4. Get a valid queue in the queue set

Function name: QueueSetMemberHandle_t xQueueSelectFromSet (QueueSetMemberHandle_t xQueueSet, TickType_t const xTicksTowait);

Function: Get queues with valid messages in the queue set

Parameter meaning:

Parameter name: xQueueSet, meaning: queue set

Parameter name: xTicksTowait, meaning: blocking timeout

return value:

Return, NULL, meaning: Failed to obtain the message

Return, other values, meaning: get the queue handle of the message

3. Event flag group

3.1. What is an event flag group?

        The event flag uses a bit to indicate whether an event occurs. The event flag group is a set of event flag bits. It can be simply understood that the event flag group is essentially an integer.

3.2. Characteristics of event flag group

        1) Each bit represents an event (the upper 8 bits are not counted)

        2) The meaning of each event is decided by the user himself

        3) Any task or interrupt can read and write these bits

        4) You can wait for a certain one to be established, or wait for multiple ones to be established at the same time.

3.3. Event flag group data type

        A 32-bit unsigned data type variable is used to store event flags, but the upper 8 bits are used to store the control information of the event flag group, and the lower 24 bits are used to store the event flags, so an event group can store up to 24 event flags.

As shown in Figure 1 below:

 figure 1

3.4. Differences between event flag groups, queues, and semaphores

1)

Name: queue, semaphore

Wake-up object: When an event occurs, only one task will be woken up

Event clearing: It is a consumptive resource. The queue data disappears after being read, and the semaphore decreases after being read.

2)

Name: event flag group

Wake-up objects: When an event occurs, all eligible tasks will be awakened

Event clearing: There are two options for the awakened task: it can be left unchanged or the event can be cleared.

4. API functions related to event flag group

4.1. Commonly used API functions

As shown in Figure 2 below:

 figure 2

4.2. Dynamically create event flag group function

Function name: EventGroupHandle_t xEventGroupCreate(void);

return value:

Return, NULL, meaning: event flag group creation failed

Return, other values, meaning: the event flag group is successfully created and the handle is returned

4.3. Clear event flag function

Function name: EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup

const EventBits_t uxBitsToClear);

parameter:

Name: xEventGroup, meaning: handle of the event flag group to be operated

Name: uxBitsToClear, meaning: event flag to be cleared

return value:

Return, integer, meaning: the value of the event flag bit in the event group before clearing the event flag group

4.4. Set event flag function

Function name: EventBits_t xEventGroupSetBits (EventGroupHandle_t xEventGroup

const EventBits_t uxBitsToSet);

parameter:

Name: xEventGroup, meaning: handle of the event flag group to be operated

Name: uxBitsToSet, meaning: event flag to be set

return value:

Return, integer, meaning: the value of the event flag bit in the event group

4.5. Waiting event flag function

函数名称:EventBits_t xEventGroupWaitBits(    EventGroupHandle_t xEventGroup,
                                                                            const EventBits_t uxBitsToWaitFor,
                                                                            const BaseType_t xClearOnExit,
                                                                            const BaseType_t xWaitForAllBits,
                                                                            const TickType_t xTicksToWait );

parameter:

Name, xEvenrGroup, meaning: Waiting event flag group handle

Name, uxBitsToWaitFor, meaning: event flag to wait for, you can use logical OR to wait for multiple event flags

Name, xClearOnExit, meaning: After successfully waiting for the event flag bit, clear the corresponding event flag bit in the event group,
pdTRUE: clear the specified bit of uxBitsToWaitFor;
pdFALSE: do not clear

Name, xWaitForAllBits, meaning: wait for all event flag bits in uxBitsToWaitFor (logical AND)
pdTRUE: Waiting bits, all are 1
pdFALSE: Waiting bits, one is 1

Name, xTicks ToWait, meaning: waiting blocking time

return value:

Return, the waiting event flag, meaning: if the waiting event flag is successful, return the waiting event flag.

Return, other values, meaning: Failure to wait for the event flag bit, return the event flag bit in the event group

Guess you like

Origin blog.csdn.net/qq_57663276/article/details/128976821