Bird
Raised Fist0
FreeRTOSprogramming~20 mins

xQueueCreate() function in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
FreeRTOS Queue Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this FreeRTOS queue creation code?

Consider the following code snippet using xQueueCreate() in FreeRTOS:

QueueHandle_t queue = xQueueCreate(3, sizeof(int));
if (queue != NULL) {
    printf("Queue created with length: %u\n", uxQueueSpacesAvailable(queue));
} else {
    printf("Queue creation failed\n");
}

What will be printed when this code runs successfully?

FreeRTOS
QueueHandle_t queue = xQueueCreate(3, sizeof(int));
if (queue != NULL) {
    printf("Queue created with length: %u\n", uxQueueSpacesAvailable(queue));
} else {
    printf("Queue creation failed\n");
}
AQueue created with length: sizeof(int)
BQueue created with length: 0
CQueue creation failed
DQueue created with length: 3
Attempts:
2 left
💡 Hint

Remember that uxQueueSpacesAvailable() returns the number of free spaces in the queue right after creation.

🧠 Conceptual
intermediate
1:30remaining
What does the second parameter of xQueueCreate() specify?

In the function call xQueueCreate(5, sizeof(float)), what does the second parameter sizeof(float) represent?

AThe number of items the queue can hold
BThe priority of the queue
CThe size in bytes of each item stored in the queue
DThe total memory size allocated for the queue
Attempts:
2 left
💡 Hint

Think about what the queue needs to know to store each element.

❓ Predict Output
advanced
2:00remaining
What error occurs when creating a queue with zero length?

What happens when you call xQueueCreate(0, sizeof(int)) in FreeRTOS?

FreeRTOS
QueueHandle_t queue = xQueueCreate(0, sizeof(int));
if (queue == NULL) {
    printf("Queue creation failed\n");
} else {
    printf("Queue created\n");
}
AQueue created
BQueue creation failed
CCompilation error
DRuntime crash
Attempts:
2 left
💡 Hint

Queues must have a positive length to hold items.

🔧 Debug
advanced
2:00remaining
Why does this queue creation code cause a compilation error?

Identify the error in this code snippet:

QueueHandle_t queue = xQueueCreate(5, int);
if (queue != NULL) {
    // use queue
}
FreeRTOS
QueueHandle_t queue = xQueueCreate(5, int);
if (queue != NULL) {
    // use queue
}
ASecond parameter must be a size in bytes, not a type
BQueue length must be a variable, not a constant
CQueueHandle_t is not declared
DMissing semicolon after xQueueCreate call
Attempts:
2 left
💡 Hint

Check the type and value of the second parameter.

🚀 Application
expert
2:30remaining
How many items can this queue hold after creation?

Given the code below, how many items can the queue hold?

QueueHandle_t queue = xQueueCreate(10, sizeof(Data));

Assuming Data is defined as:

typedef struct {
    int id;
    char name[20];
} Data;
FreeRTOS
typedef struct {
    int id;
    char name[20];
} Data;

QueueHandle_t queue = xQueueCreate(10, sizeof(Data));
A10 items
Bsizeof(struct Data) items
C30 items
DDepends on the memory available
Attempts:
2 left
💡 Hint

The first parameter to xQueueCreate() is the number of items the queue can hold.

Practice

(1/5)
1. What does the xQueueCreate() function do in FreeRTOS?
easy
A. Sends data to a queue
B. Creates a new queue to hold data items between tasks
C. Deletes an existing queue
D. Receives data from a queue

Solution

  1. Step 1: Understand the purpose of xQueueCreate()

    The function is designed to create a new queue in FreeRTOS for inter-task communication.
  2. Step 2: Differentiate from other queue functions

    Functions like sending or receiving data operate on existing queues, not create them.
  3. Final Answer:

    Creates a new queue to hold data items between tasks -> Option B
  4. Quick Check:

    xQueueCreate() = create queue [OK]
Hint: xQueueCreate() always makes a new queue [OK]
Common Mistakes:
  • Confusing creation with sending or receiving data
  • Thinking it deletes a queue
  • Assuming it initializes queue data
2. Which of the following is the correct syntax to create a queue for 10 items, each of size sizeof(int)?
easy
A. xQueueCreate(10, sizeof(int));
B. xQueueCreate(sizeof(int), 10);
C. xQueueCreate(10);
D. xQueueCreate(sizeof(int));

Solution

  1. Step 1: Recall xQueueCreate() parameters

    The first parameter is the number of items, the second is the size of each item.
  2. Step 2: Match parameters to options

    xQueueCreate(10, sizeof(int)); correctly uses 10 items and sizeof(int) as size per item.
  3. Final Answer:

    xQueueCreate(10, sizeof(int)); -> Option A
  4. Quick Check:

    Parameters = (number, size) [OK]
Hint: First param = count, second = size [OK]
Common Mistakes:
  • Swapping the order of parameters
  • Providing only one parameter
  • Using raw numbers instead of sizeof()
3. Consider this code snippet:
QueueHandle_t q = xQueueCreate(5, sizeof(char));
if (q == NULL) {
    printf("Queue creation failed\n");
} else {
    printf("Queue created successfully\n");
}
What will be printed if the queue is created successfully?
medium
A. Queue creation failed
B. Compilation error
C. Queue created successfully
D. No output

Solution

  1. Step 1: Check the return value of xQueueCreate()

    If queue creation succeeds, it returns a non-NULL handle.
  2. Step 2: Analyze the if condition

    The code prints "Queue created successfully" when q is not NULL.
  3. Final Answer:

    Queue created successfully -> Option C
  4. Quick Check:

    q != NULL means success [OK]
Hint: Check if queue handle is NULL for failure [OK]
Common Mistakes:
  • Assuming NULL means success
  • Ignoring the if condition
  • Confusing print messages
4. What is wrong with this code?
QueueHandle_t q = xQueueCreate(0, sizeof(int));
if (q == NULL) {
    // handle error
}
medium
A. Queue size cannot be zero, so creation fails
B. sizeof(int) is invalid parameter
C. Missing queue deletion after creation
D. QueueHandle_t is not the correct type

Solution

  1. Step 1: Understand queue length parameter

    The first parameter must be greater than zero to hold items.
  2. Step 2: Consequence of zero length

    Passing zero causes xQueueCreate() to fail and return NULL.
  3. Final Answer:

    Queue size cannot be zero, so creation fails -> Option A
  4. Quick Check:

    Queue length > 0 required [OK]
Hint: Queue length must be > 0 [OK]
Common Mistakes:
  • Using zero length queue
  • Confusing size of item with queue length
  • Ignoring return NULL check
5. You want to create a queue that can hold 3 structures of type SensorData. Which is the correct way to create this queue?
hard
A. xQueueCreate(1, sizeof(SensorData) * 3);
B. xQueueCreate(sizeof(SensorData), 3);
C. xQueueCreate(3, sizeof(SensorData*));
D. xQueueCreate(3, sizeof(SensorData));

Solution

  1. Step 1: Identify queue length and item size

    Queue length is 3, item size is size of one SensorData structure.
  2. Step 2: Match parameters to xQueueCreate()

    First parameter is number of items (3), second is size of each item (sizeof(SensorData)).
  3. Final Answer:

    xQueueCreate(3, sizeof(SensorData)); -> Option D
  4. Quick Check:

    Length=3, size=sizeof(struct) [OK]
Hint: Length first, size of one item second [OK]
Common Mistakes:
  • Swapping length and size parameters
  • Using pointer size instead of struct size
  • Creating queue for one large combined item
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