Bird
Raised Fist0
FreeRTOSprogramming~5 mins

xQueueSend() and xQueueReceive() in FreeRTOS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of xQueueSend() in FreeRTOS?

xQueueSend() is used to send (or add) an item to the back of a queue. It allows tasks or interrupts to pass data safely between each other.

Click to reveal answer
beginner
What does xQueueReceive() do in FreeRTOS?

xQueueReceive() receives (or removes) an item from the front of a queue. It is used by tasks to get data sent by other tasks or interrupts.

Click to reveal answer
intermediate
What happens if xQueueSend() is called when the queue is full?

If the queue is full, xQueueSend() can block the calling task for a specified time waiting for space to become available, or it can return immediately with an error if no space is free.

Click to reveal answer
beginner
What does the return value of xQueueReceive() indicate?

The return value is pdTRUE if an item was successfully received from the queue, or pdFALSE if no item was available within the specified wait time.

Click to reveal answer
intermediate
Can xQueueSend() and xQueueReceive() be used safely from interrupts?

Normally, xQueueSend() and xQueueReceive() are used in tasks. For interrupts, FreeRTOS provides special versions like xQueueSendFromISR() and xQueueReceiveFromISR() to be safe and efficient.

Click to reveal answer
What does xQueueSend() do in FreeRTOS?
ADeletes a queue
BRemoves an item from the front of a queue
CCreates a new queue
DAdds an item to the back of a queue
What does xQueueReceive() return if no item is available within the wait time?
ApdFALSE
BNULL
CpdTRUE
D-1
Which function should be used to send data to a queue from an interrupt?
AxQueueSend()
BxQueueReceive()
CxQueueSendFromISR()
DxQueueReceiveFromISR()
If a queue is full, what can xQueueSend() do?
ABlock the task until space is free
BOverwrite the oldest item
CAutomatically increase queue size
DDelete the queue
Which of these is true about xQueueReceive()?
AIt adds items to the queue
BIt removes items from the queue
CIt creates a queue
DIt deletes a queue
Explain how xQueueSend() and xQueueReceive() work together to pass data between tasks in FreeRTOS.
Think about how two friends pass notes using a mailbox.
You got /4 concepts.
    Describe the difference between xQueueSend() and xQueueSendFromISR().
    Consider how you talk differently when in a quiet room versus a noisy factory.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the xQueueSend() function in FreeRTOS?
      easy
      A. To remove an item from a queue
      B. To add an item to a queue for other tasks to receive
      C. To create a new queue
      D. To delete an existing queue

      Solution

      1. Step 1: Understand the role of xQueueSend()

        xQueueSend() is used to place data into a queue so that other tasks can retrieve it later.
      2. Step 2: Differentiate from other queue functions

        Functions like xQueueReceive() remove data, while xQueueCreate() and xQueueDelete() manage queue lifecycle, not data transfer.
      3. Final Answer:

        To add an item to a queue for other tasks to receive -> Option B
      4. Quick Check:

        xQueueSend() adds data [OK]
      Hint: Remember: Send puts data in, Receive takes data out [OK]
      Common Mistakes:
      • Confusing sending with receiving
      • Thinking it creates or deletes queues
      • Ignoring the function's data transfer role
      2. Which of the following is the correct syntax to send data to a queue using xQueueSend()?
      easy
      A. xQueueSend(queueHandle, data, 0);
      B. xQueueSend(&queueHandle, data, portMAX_DELAY);
      C. xQueueSend(queueHandle, &data, portMAX_DELAY);
      D. xQueueSend(queueHandle, &data);

      Solution

      1. Step 1: Check parameter types for xQueueSend()

        The function expects the queue handle, a pointer to the data, and a timeout value.
      2. Step 2: Match the correct syntax

        xQueueSend(queueHandle, &data, portMAX_DELAY); correctly passes the queue handle, address of data, and a timeout constant portMAX_DELAY.
      3. Final Answer:

        xQueueSend(queueHandle, &data, portMAX_DELAY); -> Option C
      4. Quick Check:

        Queue handle + &data + timeout = correct syntax [OK]
      Hint: Always pass data by address and include timeout [OK]
      Common Mistakes:
      • Passing data by value instead of pointer
      • Omitting the timeout parameter
      • Passing queue handle by address
      3. Consider the following code snippet:
      int value = 10;
      if (xQueueSend(queue, &value, 0) == pdPASS) {
          int receivedValue = 0;
          if (xQueueReceive(queue, &receivedValue, 0) == pdPASS) {
              printf("%d", receivedValue);
          }
      }

      What will be printed when this code runs?
      medium
      A. 10
      B. 0
      C. No output (queue empty)
      D. Compilation error

      Solution

      1. Step 1: Analyze xQueueSend() call

        The value 10 is sent to the queue with zero wait time. If the queue is not full, it returns pdPASS.
      2. Step 2: Analyze xQueueReceive() call

        The code tries to receive from the queue immediately. Since the value was just sent, it will receive 10 and print it.
      3. Final Answer:

        10 -> Option A
      4. Quick Check:

        Send 10, receive 10, print 10 [OK]
      Hint: Send then receive immediately prints sent value [OK]
      Common Mistakes:
      • Assuming queue is empty at receive
      • Confusing return values with data
      • Ignoring zero timeout behavior
      4. What is wrong with this code snippet?
      int data = 5;
      if (xQueueSend(queue, data, 10) != pdPASS) {
          // handle error
      }
      medium
      A. Data should be passed by pointer, not by value
      B. Timeout value 10 is invalid
      C. Return value should not be compared to pdPASS
      D. Queue handle is missing

      Solution

      1. Step 1: Check parameter types in xQueueSend()

        The second parameter must be a pointer to the data, but here data is passed by value.
      2. Step 2: Identify the error cause

        Passing data by value causes a type mismatch and likely a compilation error or incorrect behavior.
      3. Final Answer:

        Data should be passed by pointer, not by value -> Option A
      4. Quick Check:

        Pass &data, not data [OK]
      Hint: Always pass address of data to queue functions [OK]
      Common Mistakes:
      • Passing data directly instead of pointer
      • Misunderstanding timeout parameter
      • Ignoring return value check
      5. You want to send multiple integers to a queue and then receive them in order. Which approach correctly uses xQueueSend() and xQueueReceive() to achieve this without losing data?
      hard
      A. Use xQueueReceive() to send data and xQueueSend() to receive data
      B. Send all integers at once by passing an array pointer to xQueueSend(), then receive with one xQueueReceive()
      C. Send integers without checking return values, then receive once expecting all data
      D. Send each integer with xQueueSend() using a timeout, then receive each with xQueueReceive() using a timeout, checking return values each time

      Solution

      1. Step 1: Understand queue data handling

        Queues handle one item at a time, so each integer must be sent individually with xQueueSend().
      2. Step 2: Properly receive data

        Each item must be received individually with xQueueReceive(), checking return values to avoid errors or data loss.
      3. Step 3: Eliminate incorrect options

        Send all integers at once by passing an array pointer to xQueueSend(), then receive with one xQueueReceive() is wrong because queues do not send arrays as single items. Send integers without checking return values, then receive once expecting all data risks data loss by ignoring return values. Use xQueueReceive() to send data and xQueueSend() to receive data reverses function roles.
      4. Final Answer:

        Send each integer with xQueueSend() using a timeout, then receive each with xQueueReceive() using a timeout, checking return values each time -> Option D
      5. Quick Check:

        Send and receive items one by one, check returns [OK]
      Hint: Send and receive items individually, always check returns [OK]
      Common Mistakes:
      • Trying to send multiple items at once
      • Ignoring return values causing lost data
      • Mixing up send and receive functions
      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