UART
Comms
UART
Buffer
CPU
What actually happens* *assuming single-core processor
“preemptive scheduling” Interrupt Service Routine (ISR)
ISR
(H/W)
Priority
(S/W)
...
1 Task B Task C Task C
0 Task A Task A Task A Task A
OS Idle
“tick” time
1 ms
Deferred Interrupt
ISR gives semaphore Scheduler called to run
Blocked waiting for semaphore newly unblocked task
ISR
(H/W)
Priority
(S/W)
...
2 B
1 Task A Task A Task A Task A Task A Task A
OS Idle
“tick” time
1 ms
After 10 samples have
been read, Task A will
wake up and compute
Double Buffer or the average.
Circular Buffer
Task A
Global:
Timer ISR Average
Samples from (float)
ADC (10 Hz)
Task B
Serial Terminal
> hello
> avg
Average: 59.2
> blah
>