Bird
Raised Fist0
FreeRTOSprogramming~15 mins

uxTaskPriorityGet() for reading priority in FreeRTOS - Mini Project: Build & Apply

Choose your learning style10 modes available
Using uxTaskPriorityGet() to Read Task Priority in FreeRTOS
📖 Scenario: You are working on a FreeRTOS embedded system project. You want to check the priority of a specific task to understand how your tasks are scheduled.
🎯 Goal: Learn how to use the uxTaskPriorityGet() function to read and display the priority of a FreeRTOS task.
📋 What You'll Learn
Create a FreeRTOS task handle variable named myTaskHandle.
Create a variable named taskPriority to store the priority.
Use uxTaskPriorityGet() with myTaskHandle to get the priority.
Print the priority using printf().
💡 Why This Matters
🌍 Real World
Reading task priorities helps you understand and debug how your embedded system schedules different tasks.
💼 Career
Embedded systems developers often need to manage and check task priorities to ensure real-time performance and responsiveness.
Progress0 / 4 steps
1
Create a FreeRTOS task handle variable
Create a variable called myTaskHandle of type TaskHandle_t and set it to NULL.
FreeRTOS
Hint

This variable will hold the handle of the task whose priority you want to read.

2
Create a variable to store the task priority
Create a variable called taskPriority of type UBaseType_t to store the task priority.
FreeRTOS
Hint

This variable will hold the priority value returned by uxTaskPriorityGet().

3
Use uxTaskPriorityGet() to get the task priority
Assign the result of uxTaskPriorityGet(myTaskHandle) to the variable taskPriority.
FreeRTOS
Hint

This function returns the priority of the task whose handle is myTaskHandle.

4
Print the task priority
Use printf() to display the text "Task priority is: " followed by the value of taskPriority.
FreeRTOS
Hint

The printed priority will be 0 because myTaskHandle is NULL (no task assigned).

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