Bird
Raised Fist0
FreeRTOSprogramming~10 mins

vTaskPrioritySet() dynamic priority in FreeRTOS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to set the priority of a FreeRTOS task.

FreeRTOS
vTaskPrioritySet([1], 3);
Drag options to blanks, or click blank then click option'
Apriority
BTaskHandle_t
CxTaskHandle
DtaskHandle
Attempts:
3 left
💡 Hint
Common Mistakes
Using the priority value as the first argument.
Using the type name instead of a variable.
Using an undefined variable.
2fill in blank
medium

Complete the code to increase the priority of a task by 1.

FreeRTOS
vTaskPrioritySet(taskHandle, [1] + 1);
Drag options to blanks, or click blank then click option'
AuxTaskPriorityGet(taskHandle)
BtaskPriority
CpriorityLevel
DgetPriority()
Attempts:
3 left
💡 Hint
Common Mistakes
Using an undefined variable for priority.
Trying to call a method that does not exist.
Passing the priority value directly without getting current priority.
3fill in blank
hard

Fix the error in setting the task priority dynamically.

FreeRTOS
int newPriority = [1];
vTaskPrioritySet(taskHandle, newPriority);
Drag options to blanks, or click blank then click option'
ApriorityLevel + 1
BuxTaskPriorityGet(taskHandle) + 1
CgetPriority() + 1
DtaskPriority + 1
Attempts:
3 left
💡 Hint
Common Mistakes
Using variables that are not declared or initialized.
Using functions that do not exist in FreeRTOS.
Not adding 1 to the current priority.
4fill in blank
hard

Fill both blanks to create a dictionary of task names and their priorities for tasks with priority greater than 2.

FreeRTOS
taskPriorities = { [1]: uxTaskPriorityGet([2]) for [1] in taskList if uxTaskPriorityGet([1]) > 2 }
Drag options to blanks, or click blank then click option'
Atask
BtaskHandle
Cpriority
DtaskName
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variables for key and value access.
Using undefined variables.
Confusing task names with task handles.
5fill in blank
hard

Fill all three blanks to create a dictionary mapping task names to their priorities for tasks with priority above 1.

FreeRTOS
taskPriorityDict = { [1]: [2] for [3] in tasks if [2] > 1 }
Drag options to blanks, or click blank then click option'
Atask.name
Btask.priority
Ctask
DuxTaskPriorityGet(task)
Attempts:
3 left
💡 Hint
Common Mistakes
Using undefined variables for keys or values.
Not calling the function to get priority.
Using the wrong variable in the loop.

Practice

(1/5)
1.

What does the FreeRTOS function vTaskPrioritySet() do?

easy
A. It changes the priority of a task while the program is running.
B. It creates a new task with a fixed priority.
C. It deletes a task permanently.
D. It suspends a task temporarily.

Solution

  1. Step 1: Understand the function purpose

    vTaskPrioritySet() is designed to change the priority of an existing task dynamically during runtime.
  2. Step 2: Compare with other task functions

    Creating, deleting, or suspending tasks are done by different functions, not vTaskPrioritySet().
  3. Final Answer:

    It changes the priority of a task while the program is running. -> Option A
  4. Quick Check:

    vTaskPrioritySet() changes priority [OK]
Hint: Remember: vTaskPrioritySet changes priority dynamically [OK]
Common Mistakes:
  • Confusing vTaskPrioritySet with task creation functions
  • Thinking it deletes or suspends tasks
  • Assuming priority is fixed at task creation
2.

Which of the following is the correct syntax to change a task's priority using vTaskPrioritySet()?

TaskHandle_t xTaskHandle;
// Change priority to 3
_____;
easy
A. vTaskPrioritySetPriority(xTaskHandle, 3);
B. vTaskPrioritySet(xTaskHandle, 3);
C. vTaskPrioritySet(3, xTaskHandle);
D. vTaskSetPriority(xTaskHandle, 3);

Solution

  1. Step 1: Recall the function signature

    The correct function is vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority), so the task handle comes first, then the new priority.
  2. Step 2: Check the options

    vTaskPrioritySet(xTaskHandle, 3); matches the correct syntax exactly. Options A, B, and D either swap parameters or use incorrect function names.
  3. Final Answer:

    vTaskPrioritySet(xTaskHandle, 3); -> Option B
  4. Quick Check:

    Correct syntax = vTaskPrioritySet(task, priority) [OK]
Hint: Function name and parameter order matter: task handle first [OK]
Common Mistakes:
  • Swapping the order of parameters
  • Using incorrect function names
  • Passing priority before task handle
3.

Consider the following code snippet:

TaskHandle_t xTask1;
// Assume xTask1 is created with priority 2
vTaskPrioritySet(xTask1, 5);
UBaseType_t newPriority = uxTaskPriorityGet(xTask1);
printf("%u", newPriority);

What will be printed?

medium
A. 0
B. 2
C. 5
D. Compilation error

Solution

  1. Step 1: Understand priority change

    The call vTaskPrioritySet(xTask1, 5) changes the task's priority from 2 to 5.
  2. Step 2: Check the priority retrieval

    uxTaskPriorityGet(xTask1) returns the current priority, which is now 5.
  3. Final Answer:

    5 -> Option C
  4. Quick Check:

    Priority updated to 5, so output is 5 [OK]
Hint: Priority changes immediately, so get returns new value [OK]
Common Mistakes:
  • Assuming priority stays the same after set
  • Confusing priority with task handle
  • Thinking printf prints task handle
4.

What is wrong with this code snippet?

TaskHandle_t xTask2 = NULL;
vTaskPrioritySet(xTask2, 4);
medium
A. The function vTaskPrioritySet returns a value that is ignored.
B. Priority 4 is invalid; priorities must be 0 or 1 only.
C. vTaskPrioritySet requires a pointer to the task, not the handle.
D. xTask2 is NULL, so setting priority causes undefined behavior.

Solution

  1. Step 1: Check the task handle value

    The variable xTask2 is set to NULL, meaning it does not point to a valid task.
  2. Step 2: Understand effect of NULL handle

    Calling vTaskPrioritySet() with a NULL handle leads to undefined behavior or runtime error because no valid task exists to change priority.
  3. Final Answer:

    xTask2 is NULL, so setting priority causes undefined behavior. -> Option D
  4. Quick Check:

    NULL task handle causes error [OK]
Hint: Never pass NULL as task handle to vTaskPrioritySet [OK]
Common Mistakes:
  • Ignoring NULL task handle
  • Assuming priority range is only 0 or 1
  • Confusing handle with pointer to handle
5.

You have two tasks: TaskA with priority 3 and TaskB with priority 5. You want TaskA to temporarily run with higher priority than TaskB during a critical section. Which code snippet correctly achieves this?

TaskHandle_t xTaskA, xTaskB;
// Initially priorities: TaskA=3, TaskB=5
// Critical section starts
_____;
// Critical section ends
vTaskPrioritySet(xTaskA, 3);
hard
A. vTaskPrioritySet(xTaskA, 6);
B. vTaskPrioritySet(xTaskB, 2);
C. vTaskPrioritySet(xTaskA, 5);
D. vTaskPrioritySet(xTaskB, 3);

Solution

  1. Step 1: Identify priority requirements

    TaskA must have higher priority than TaskB (which is 5) during the critical section.
  2. Step 2: Choose correct priority change

    Setting TaskA to 6 makes it higher than TaskB's 5. Options A and D lower TaskB's priority instead. vTaskPrioritySet(xTaskA, 5); sets TaskA to 5, equal to TaskB, not higher.
  3. Step 3: Restore original priority after critical section

    After the critical section, TaskA's priority is reset to 3 as shown.
  4. Final Answer:

    vTaskPrioritySet(xTaskA, 6); -> Option A
  5. Quick Check:

    TaskA priority > TaskB priority during critical section [OK]
Hint: Raise TaskA priority above TaskB, then restore after [OK]
Common Mistakes:
  • Setting TaskA priority equal to TaskB
  • Lowering TaskB priority instead of raising TaskA
  • Not restoring original priority after critical section
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