Bird
Raised Fist0
FreeRTOSprogramming~20 mins

uxTaskPriorityGet() for reading priority in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
FreeRTOS Priority 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 uxTaskPriorityGet() for a created task?

Consider the following FreeRTOS code snippet. What will be the output printed by printf?

FreeRTOS
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>

void vTaskFunction(void *pvParameters) {
    // Task code here
    vTaskDelete(NULL);
}

int main() {
    TaskHandle_t xTaskHandle = NULL;
    BaseType_t xReturned;
    UBaseType_t uxPriority;

    xReturned = xTaskCreate(vTaskFunction, "Task1", configMINIMAL_STACK_SIZE, NULL, 3, &xTaskHandle);
    if(xReturned == pdPASS) {
        uxPriority = uxTaskPriorityGet(xTaskHandle);
        printf("Task priority: %u\n", (unsigned int)uxPriority);
    }
    return 0;
}
ATask priority: 3
BTask priority: 0
CCompilation error due to missing task handle
DTask priority: configMAX_PRIORITIES
Attempts:
2 left
💡 Hint

Remember that uxTaskPriorityGet() returns the priority assigned when the task was created.

🧠 Conceptual
intermediate
1:30remaining
What does uxTaskPriorityGet() return if passed NULL?

In FreeRTOS, what is the return value of uxTaskPriorityGet(NULL) when called from within a task?

AThe priority of the calling task
BZero (lowest priority)
CconfigMAX_PRIORITIES
DCauses a runtime error
Attempts:
2 left
💡 Hint

Passing NULL means the function uses the current task handle internally.

🔧 Debug
advanced
2:30remaining
Why does uxTaskPriorityGet() return 0 unexpectedly?

A developer creates a task with priority 4 but uxTaskPriorityGet() returns 0 for that task's handle. What is the most likely cause?

AThe FreeRTOS kernel is not started yet
BThe task priority was set to 0 after creation
CThe task handle passed to <code>uxTaskPriorityGet()</code> is invalid or uninitialized
DThe task was deleted before calling <code>uxTaskPriorityGet()</code>
Attempts:
2 left
💡 Hint

Check if the task handle is properly assigned after task creation.

📝 Syntax
advanced
1:30remaining
Which code snippet correctly reads a task's priority?

Which of the following code snippets correctly uses uxTaskPriorityGet() to read the priority of a task?

AUBaseType_t prio = uxTaskPriorityGet(&xTaskHandle);
BUBaseType_t prio = uxTaskPriorityGet(xTaskHandle);
Cint prio = uxTaskPriorityGet(xTaskHandle);
DUBaseType_t prio = uxTaskPriorityGet(NULL, xTaskHandle);
Attempts:
2 left
💡 Hint

Check the function signature and parameter types.

🚀 Application
expert
3:00remaining
How to check and print the priority of the current task safely?

Write the correct sequence of code lines to get and print the priority of the currently running task in FreeRTOS.

A3,4,1,2,5
B3,1,4,2,5
C1,3,2,4,5
D1,2,3,4,5
Attempts:
2 left
💡 Hint

Declare variables first, then get current task handle, then get priority, then print.

Practice

(1/5)
1.

What does the FreeRTOS function uxTaskPriorityGet() do?

easy
A. It returns the priority of a specified task.
B. It sets the priority of a specified task.
C. It deletes a specified task.
D. It creates a new task.

Solution

  1. Step 1: Understand the function purpose

    uxTaskPriorityGet() is designed to read the priority of a task, not to modify or manage tasks.
  2. Step 2: Match function behavior to options

    Only "It returns the priority of a specified task." correctly states it returns the priority of a specified task.
  3. Final Answer:

    It returns the priority of a specified task. -> Option A
  4. Quick Check:

    uxTaskPriorityGet() reads priority = It returns the priority of a specified task. [OK]
Hint: Remember: 'Get' means read, not change [OK]
Common Mistakes:
  • Confusing 'get' with 'set' functions
  • Thinking it creates or deletes tasks
  • Assuming it returns task handle
2.

Which of the following is the correct way to get the priority of the current task using uxTaskPriorityGet()?

TaskHandle_t xTaskHandle;
UBaseType_t uxPriority = ?;
easy
A. uxPriority = uxTaskPriorityGet(xTaskHandle);
B. uxPriority = uxTaskPriorityGet(NULL);
C. uxPriority = uxTaskPriorityGet(&xTaskHandle);
D. uxPriority = uxTaskPriorityGet(*xTaskHandle);

Solution

  1. Step 1: Recall how to get current task priority

    Passing NULL to uxTaskPriorityGet() returns the priority of the current task.
  2. Step 2: Check each option

    uxPriority = uxTaskPriorityGet(xTaskHandle); uses uninitialized xTaskHandle (undefined behavior). uxPriority = uxTaskPriorityGet(&xTaskHandle); passes address (wrong type). uxPriority = uxTaskPriorityGet(*xTaskHandle); dereferences uninitialized handle (crash). Only uxPriority = uxTaskPriorityGet(NULL); is correct.
  3. Final Answer:

    uxPriority = uxTaskPriorityGet(NULL); -> Option B
  4. Quick Check:

    Use NULL for current task priority [OK]
Hint: Pass NULL to get current task priority [OK]
Common Mistakes:
  • Passing address of handle instead of handle
  • Dereferencing handle incorrectly
  • Using uninitialized task handle
3.

Given the following code snippet, what will be printed?

TaskHandle_t xHandle = xTaskGetHandle("Task1");
UBaseType_t uxPriority = uxTaskPriorityGet(xHandle);
printf("Priority: %u\n", uxPriority);

Assume "Task1" exists and has priority 3.

medium
A. Priority: 0
B. Compilation error
C. Priority: 3
D. Priority: 1

Solution

  1. Step 1: Understand task handle retrieval

    xTaskGetHandle("Task1") returns the handle of the task named "Task1" which exists with priority 3.
  2. Step 2: Use uxTaskPriorityGet() to read priority

    Calling uxTaskPriorityGet(xHandle) returns the priority of that task, which is 3.
  3. Final Answer:

    Priority: 3 -> Option C
  4. Quick Check:

    uxTaskPriorityGet returns task priority = 3 [OK]
Hint: Get handle then get priority returns actual task priority [OK]
Common Mistakes:
  • Assuming default priority 0
  • Confusing handle with task name
  • Expecting syntax error
4.

Identify the error in this code snippet:

TaskHandle_t xHandle;
UBaseType_t uxPriority = uxTaskPriorityGet(xHandle);
printf("Priority: %u\n", uxPriority);
medium
A. xHandle is uninitialized before use.
B. uxTaskPriorityGet() cannot be called with a TaskHandle_t.
C. printf format specifier is incorrect.
D. uxPriority should be a pointer.

Solution

  1. Step 1: Check variable initialization

    xHandle is declared but not assigned any value before use.
  2. Step 2: Understand consequences of uninitialized handle

    Passing an uninitialized handle to uxTaskPriorityGet() leads to undefined behavior or incorrect priority reading.
  3. Final Answer:

    xHandle is uninitialized before use. -> Option A
  4. Quick Check:

    Always initialize task handles before use [OK]
Hint: Initialize task handle before getting priority [OK]
Common Mistakes:
  • Ignoring uninitialized variables
  • Misunderstanding function parameter types
  • Assuming pointer needed for uxPriority
5.

You want to check if the current task has higher priority than another task named "WorkerTask". Which code snippet correctly compares their priorities?

TaskHandle_t xWorkerHandle = xTaskGetHandle("WorkerTask");
UBaseType_t uxCurrentPriority = uxTaskPriorityGet(NULL);
UBaseType_t uxWorkerPriority = uxTaskPriorityGet(xWorkerHandle);
// What next?
hard
A. if (uxCurrentPriority != uxWorkerPriority) { /* current task higher */ }
B. if (uxCurrentPriority < uxWorkerPriority) { /* current task higher */ }
C. if (uxCurrentPriority == uxWorkerPriority) { /* current task higher */ }
D. if (uxCurrentPriority > uxWorkerPriority) { /* current task higher */ }

Solution

  1. Step 1: Understand priority comparison logic

    Higher numeric value means higher priority in FreeRTOS.
  2. Step 2: Compare current and worker task priorities

    Use > operator to check if current task priority is higher than worker's.
  3. Final Answer:

    if (uxCurrentPriority > uxWorkerPriority) { /* current task higher */ } -> Option D
  4. Quick Check:

    Higher number = higher priority [OK]
Hint: Use '>' to check if current task priority is higher [OK]
Common Mistakes:
  • Using '<' instead of '>' for priority comparison
  • Confusing equality with higher priority
  • Not retrieving correct task handles
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