Hardware interrupts are important in many embedded systems. They allow us to respond to external events (such as a button being pressed) or internal events (such as a timer expiring) in an asynchronous manner, which means that the processor can stop whatever it was doing to run an interrupt service routine (ISR).
The solution to the challenge in the video can be found here: https://www.digikey.com/en/maker/projects/introduction-to-rtos-solution-to-part-9-hardware-interrupts/3ae7a68462584e1eb408e1638002e9ed
Code for this video series (including demonstrations, challenges, and solutions) can be found here: https://github.com/ShawnHymel/introduction-to-rtos
In most RTOSes, such as FreeRTOS, hardware interrupts occur at a higher priority than all other tasks. This means, unless specifically disabled, hardware interrupts will halt the execution of any currently running task. The CPU will be forced to handle the interrupt before returning to the task.
A few tips when working with interrupts:
ISRs should never block, which means you should only use FreeRTOS kernel function calls that end in “FromISR”
You should keep ISRs as short as possible to avoid delaying tasks longer than necessary
Any global variables that get updated in an ISR should be declared with the “volatile” qualifier
Rather than perform processing inside an ISR, you can “defer processing” by collecting data into a buffer and letting a task do the processinging. In the video, we look at how to accomplish deferred processing using semaphores (note that you can also use queues and task notifications).
When an ISR is done, it can set a lock (e.g. “give” a semaphore), which will unblock a task. This task can then use any data collected by the ISR (e.g. a new ADC value, a buffer filled with data from the serial port, etc.). With this method, you can keep ISRs short while relying on a task to perform any necessary processing.
Introduction to RTOS Part 1 – What is a Real-Time Operating System (RTOS)? – https://youtu.be/F321087yYy4
Introduction to RTOS Part 2 – Getting Started with FreeRTOS – https://youtu.be/JIr7Xm_riRs
Introduction to RTOS Part 3 – Task Scheduling – https://youtu.be/95yUbClyf3E
Introduction to RTOS Part 4 – Memory Management – https://youtu.be/Qske3yZRW5I
Introduction to RTOS Part 5 – Queue – https://youtu.be/pHJ3lxOoWeI
Introduction to RTOS Part 6 – Mutex – https://youtu.be/I55auRpbiTs
Introduction to RTOS Part 7 – https://youtu.be/5JcMtbA9QEE
Introduction to RTOS Part 8 – https://youtu.be/b1f1Iex0Tso
Introduction to RTOS Part 9 – https://youtu.be/qsflCf6ahXU
Maker.io – https://www.digikey.com/en/maker
Digi-Key’s Blog – TheCircuit https://www.digikey.com/en/blog
Connect with Digi-Key on Facebook https://www.facebook.com/digikey.electronics/
And follow us on Twitter https://twitter.com/digikey