Table of contents
1.1. Introduction to 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.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.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 clearName, xWaitForAllBits, meaning: wait for all event flag bits in uxBitsToWaitFor (logical AND)
pdTRUE: Waiting bits, all are 1
pdFALSE: Waiting bits, one is 1Name, 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