A critical section is a part of the code where shared resources are accessed and interrupts are temporarily disabled to prevent data corruption or race conditions.
Click to reveal answer
intermediate
How does FreeRTOS disable interrupts to protect critical sections?
FreeRTOS disables interrupts by setting the interrupt mask to a level that prevents context switches and interrupt service routines from running during the critical section.
Click to reveal answer
beginner
Which FreeRTOS API functions are used to enter and exit critical sections?
The functions are taskENTER_CRITICAL() to enter and taskEXIT_CRITICAL() to exit a critical section.
Click to reveal answer
intermediate
Why should critical sections be kept as short as possible?
Because disabling interrupts for too long can delay important tasks and reduce system responsiveness, leading to missed deadlines or system instability.
Click to reveal answer
advanced
What is the difference between taskENTER_CRITICAL() and portDISABLE_INTERRUPTS() in FreeRTOS?
taskENTER_CRITICAL() disables interrupts and also manages nesting of critical sections, while portDISABLE_INTERRUPTS() disables interrupts globally without nesting support.
Click to reveal answer
What is the main purpose of disabling interrupts in a critical section?
ATo speed up the CPU
BTo allow multiple tasks to run simultaneously
CTo prevent data corruption by stopping context switches
DTo save power
✗ Incorrect
Disabling interrupts prevents other tasks or interrupt routines from accessing shared resources simultaneously, avoiding data corruption.
Which FreeRTOS function should you call to safely enter a critical section?
AtaskENTER_CRITICAL()
BportENABLE_INTERRUPTS()
CvTaskDelay()
DxTaskCreate()
✗ Incorrect
taskENTER_CRITICAL() disables interrupts and manages nesting to protect critical sections.
What happens if a critical section is too long in FreeRTOS?
AMore tasks run faster
BSystem responsiveness decreases
CMemory usage decreases
DInterrupts become more frequent
✗ Incorrect
Long critical sections block interrupts and context switches, reducing system responsiveness.
Which statement is true about taskEXIT_CRITICAL()?
AIt re-enables interrupts after a critical section
BIt disables interrupts
CIt creates a new task
DIt delays the current task
✗ Incorrect
taskEXIT_CRITICAL() restores interrupt state to allow normal operation after a critical section.
What is the risk of not disabling interrupts when accessing shared data?
AAutomatic task synchronization
BFaster execution
CLower power consumption
DData corruption or race conditions
✗ Incorrect
Without disabling interrupts, multiple tasks or ISRs can modify shared data simultaneously, causing errors.
Explain what a critical section is and why interrupt disabling is important in FreeRTOS.
Think about what happens when multiple tasks try to change the same data at the same time.
You got /3 concepts.
Describe the difference between taskENTER_CRITICAL() and portDISABLE_INTERRUPTS() and when to use each.
Consider how nesting affects interrupt enabling and disabling.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of using taskENTER_CRITICAL() and taskEXIT_CRITICAL() in FreeRTOS?
easy
A. To prevent interrupts during a critical section of code
B. To start and stop a task scheduler
C. To allocate memory dynamically
D. To create a new task
Solution
Step 1: Understand critical sections in FreeRTOS
Critical sections are used to protect code that must not be interrupted to avoid data corruption or race conditions.
Step 2: Role of taskENTER_CRITICAL() and taskEXIT_CRITICAL()
These functions disable and enable interrupts respectively, marking the start and end of a critical section.
Final Answer:
To prevent interrupts during a critical section of code -> Option A
Quick Check:
Critical sections stop interrupts = A [OK]
Hint: Critical sections disable interrupts to protect code [OK]
Common Mistakes:
Confusing critical sections with task creation
Thinking they manage memory
Assuming they start the scheduler
2. Which of the following is the correct syntax to mark the start of a critical section in FreeRTOS?
easy
A. taskEXIT_CRITICAL();
B. vTaskStartCritical();
C. taskENTER_CRITICAL();
D. xTaskDisableInterrupts();
Solution
Step 1: Identify the function to enter critical section
The correct FreeRTOS API to disable interrupts and enter a critical section is taskENTER_CRITICAL().
Step 2: Check other options for correctness
taskEXIT_CRITICAL() exits the critical section, others are not valid FreeRTOS functions.
Final Answer:
taskENTER_CRITICAL(); -> Option C
Quick Check:
Enter critical section = taskENTER_CRITICAL() [OK]
Hint: Enter critical section with taskENTER_CRITICAL() [OK]
Common Mistakes:
Using taskEXIT_CRITICAL() to start critical section
D. Interrupts remain disabled causing system issues
Solution
Step 1: Check for matching critical section calls
The code calls taskENTER_CRITICAL() but does not call taskEXIT_CRITICAL() to re-enable interrupts.
Step 2: Understand consequences of missing exit
Interrupts remain disabled indefinitely, which can cause system to freeze or miss important events.
Final Answer:
Interrupts remain disabled causing system issues -> Option D
Quick Check:
Missing taskEXIT_CRITICAL() disables interrupts forever = A [OK]
Hint: Always pair taskENTER_CRITICAL() with taskEXIT_CRITICAL() [OK]
Common Mistakes:
Ignoring missing exit call
Assuming increment fails
Thinking code has syntax errors
5. You have a shared resource accessed by multiple tasks and interrupts. Which approach best protects the resource while keeping system responsiveness high?
hard
A. Use long critical sections with taskENTER_CRITICAL() and taskEXIT_CRITICAL() around all resource access
B. Use short critical sections only around the minimal code that accesses the resource
C. Disable all interrupts globally for the entire program runtime
D. Avoid using critical sections and rely on task delays
Solution
Step 1: Understand impact of critical section length
Long critical sections block interrupts for too long, reducing system responsiveness.
Step 2: Best practice for protecting shared resources
Short critical sections minimize interrupt blocking while protecting shared data safely.
Final Answer:
Use short critical sections only around the minimal code that accesses the resource -> Option B
Quick Check:
Short critical sections = better responsiveness [OK]
Hint: Keep critical sections short for best performance [OK]
Common Mistakes:
Using long critical sections unnecessarily
Disabling interrupts globally
Ignoring synchronization needs
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.