Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Queue set for monitoring multiple queues in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Queue Set Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of xQueueSelectFromSet when multiple queues have data
Given two queues added to a queue set, both containing data, what does xQueueSelectFromSet return?
FreeRTOS
QueueSetHandle_t xQueueSet = xQueueCreateSet(10);
QueueHandle_t xQueue1 = xQueueCreate(5, sizeof(int));
QueueHandle_t xQueue2 = xQueueCreate(5, sizeof(int));
xQueueAddToSet(xQueue1, xQueueSet);
xQueueAddToSet(xQueue2, xQueueSet);
int val = 42;
xQueueSend(xQueue1, &val, 0);
xQueueSend(xQueue2, &val, 0);
QueueHandle_t xReadyQueue = xQueueSelectFromSet(xQueueSet, 0);
AxReadyQueue is NULL because multiple queues have data
BxReadyQueue is always xQueue1
CxReadyQueue is xQueue1 or xQueue2, but which one is not guaranteed
DxReadyQueue is always xQueue2
Attempts:
2 left
💡 Hint
Think about how FreeRTOS handles multiple ready queues in a queue set.
🧠 Conceptual
intermediate
1:30remaining
Purpose of a Queue Set in FreeRTOS
What is the main purpose of using a queue set in FreeRTOS?
ATo monitor multiple queues and semaphores simultaneously for data availability
BTo increase the size of a single queue dynamically
CTo prioritize tasks based on queue length
DTo create a queue that stores different data types
Attempts:
2 left
💡 Hint
Think about how you can wait on multiple queues at once.
❓ Troubleshoot
advanced
2:00remaining
Why does xQueueSelectFromSet return NULL unexpectedly?
A task calls xQueueSelectFromSet with a non-zero block time, but it returns NULL immediately. What is a likely cause?
AThe task priority is too high to block
BThe queues in the set are empty and block time is zero
CThe queues in the set are full
DThe queue set handle passed is invalid or not created properly
Attempts:
2 left
💡 Hint
Check the validity of the queue set handle and initialization.
✅ Best Practice
advanced
1:30remaining
Best practice for adding queues to a queue set
Which is the best practice when adding queues to a queue set in FreeRTOS?
AAdd queues dynamically while tasks are blocked on the queue set
BAdd queues after the queue set is created and before tasks block on it
CAdd only queues with the same item size to the queue set
DAdd queues with different priorities to the queue set
Attempts:
2 left
💡 Hint
Consider when queues should be added relative to task execution.
🔀 Workflow
expert
2:30remaining
Correct sequence to monitor multiple queues using a queue set
Arrange the steps in the correct order to monitor multiple queues using a queue set in FreeRTOS.
A1,2,3,4
B2,1,3,4
C1,3,2,4
D3,1,2,4
Attempts:
2 left
💡 Hint
Think about creating queues before adding them to a set.

Practice

(1/5)
1. What is the main purpose of a Queue Set in FreeRTOS?
easy
A. To monitor multiple queues with a single wait call
B. To increase the size of a single queue
C. To create a queue that stores different data types
D. To prioritize tasks based on queue length

Solution

  1. Step 1: Recall the purpose of a Queue Set

    A Queue Set allows monitoring multiple queues or semaphores with one blocking call.
  2. Step 2: Match options to the Queue Set purpose

    Only "To monitor multiple queues with a single wait call" correctly describes this purpose; others describe unrelated features.
  3. Final Answer:

    To monitor multiple queues with a single wait call -> Option A
  4. Quick Check:

    Queue Set = single wait for many queues [OK]
Hint: Queue Set = watch many queues with one wait [OK]
Common Mistakes:
  • Thinking Queue Set increases queue size
  • Confusing Queue Set with task priority
  • Believing Queue Set stores mixed data types
2. Which of the following is the correct way to create a queue set for monitoring two queues in FreeRTOS?
easy
A. xQueueSetCreate( queue1Length + queue2Length, itemSize )
B. xQueueSetCreate( queue1Length * queue2Length, itemSize )
C. xQueueSetCreate( queue1Length + queue2Length, sizeof(void*) )
D. xQueueSetCreate( queue1Length + queue2Length, 0 )

Solution

  1. Step 1: Review parameters of xQueueSetCreate

    The first parameter is the total number of items the set can hold, usually sum of queue lengths. The second is the size of a pointer (sizeof(void*)) because queue sets hold references to queues.
  2. Step 2: Evaluate each option

    xQueueSetCreate( queue1Length + queue2Length, sizeof(void*) ) correctly uses sum of lengths and pointer size. Others are incorrect: itemSize, multiplication, or zero size.
  3. Final Answer:

    xQueueSetCreate( queue1Length + queue2Length, sizeof(void*) ) -> Option C
  4. Quick Check:

    Queue set size = sum lengths, item size = pointer size [OK]
Hint: Queue set size = sum of queues, item size = pointer size [OK]
Common Mistakes:
  • Using item size instead of pointer size
  • Multiplying queue lengths instead of adding
  • Setting item size to zero
3. Given the code snippet:
QueueHandle_t queue1 = xQueueCreate(5, sizeof(int));
QueueHandle_t queue2 = xQueueCreate(3, sizeof(int));
QueueSetHandle_t queueSet = xQueueSetCreate(8, sizeof(void*));
xQueueAddToSet(queue1, queueSet);
xQueueAddToSet(queue2, queueSet);
QueueSetMemberHandle_t activatedQueue = xQueueSelectFromSet(queueSet, portMAX_DELAY);

What does activatedQueue represent after xQueueSelectFromSet returns?
medium
A. A pointer to the data item received
B. A handle to the queue that has data available
C. The total number of items in all queues
D. NULL if no queues have data

Solution

  1. Step 1: Analyze xQueueSelectFromSet behavior

    This function blocks until any queue in the set has data, then returns a handle to that queue.
  2. Step 2: Determine what activatedQueue holds

    It holds the queue handle that has data ready to be read, not the data itself or count.
  3. Final Answer:

    A handle to the queue that has data available -> Option B
  4. Quick Check:

    xQueueSelectFromSet returns queue handle with data [OK]
Hint: xQueueSelectFromSet returns queue handle with data ready [OK]
Common Mistakes:
  • Thinking it returns data pointer
  • Confusing with total item count
  • Expecting NULL when data is available
4. What is wrong with this code snippet for using a queue set?
QueueSetHandle_t set = xQueueSetCreate(5, sizeof(void*));
QueueHandle_t q1 = xQueueCreate(3, sizeof(int));
xQueueAddToSet(q1, set);
QueueSetMemberHandle_t member = xQueueSelectFromSet(set, portMAX_DELAY);
int value;
xQueueReceive(set, &value, 0);
medium
A. xQueueCreate uses wrong item size
B. Queue set size is too small for the queue length
C. xQueueAddToSet is missing for q1
D. xQueueReceive is called with a queue set handle instead of a queue handle

Solution

  1. Step 1: Examine the xQueueReceive call

    The code calls xQueueReceive(set, &value, 0), passing the queue set handle 'set'.
  2. Step 2: Recall the return value of xQueueSelectFromSet

    It returns 'member', a handle to the queue with data available.
  3. Step 3: Identify the mistake

    xQueueReceive must use the queue handle 'member', not the queue set handle 'set'.
  4. Final Answer:

    xQueueReceive is called with a queue set handle instead of a queue handle -> Option D
  5. Quick Check:

    xQueueReceive uses queue handle from set, not set itself [OK]
Hint: xQueueSelectFromSet returns queue handle for xQueueReceive [OK]
Common Mistakes:
  • Confusing queue set handle with queue handle
  • Assuming queue set size must match queue length
  • Missing xQueueAddToSet call
5. You want to monitor three queues with lengths 4, 5, and 6 using a queue set. Which of the following is the best practice to create and use the queue set correctly?
hard
A. Create queue set with size 15, add all queues, then call xQueueSelectFromSet to wait
B. Create queue set with size 6, add all queues, then call xQueueSelectFromSet to wait
C. Create queue set with size 4, add only the largest queue, then call xQueueSelectFromSet
D. Create queue set with size 15, add queues after calling xQueueSelectFromSet

Solution

  1. Step 1: Calculate total queue set size

    The queue set size must be at least the sum of all queue lengths: 4 + 5 + 6 = 15.
  2. Step 2: Add all queues before waiting

    All queues must be added to the set before calling xQueueSelectFromSet to monitor them properly.
  3. Step 3: Evaluate options

    Create queue set with size 15, add all queues, then call xQueueSelectFromSet to wait follows best practice: correct size, all queues added, then wait. Others fail on size, timing, or completeness.
  4. Final Answer:

    Create queue set with size 15, add all queues, then call xQueueSelectFromSet to wait -> Option A
  5. Quick Check:

    Queue set size = sum lengths, add all queues first [OK]
Hint: Queue set size = sum of queues; add all before waiting [OK]
Common Mistakes:
  • Using queue set size smaller than total queue lengths
  • Adding queues after waiting
  • Adding only some queues to the set
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard