You Don't Need an RTOS (Part 4)
In this fourth (and final!) article I'll share with you the last of the inter-process communication (IPC) methods I mentioned in Part 3: mailboxes/queues, counting semaphores, the Observer pattern, and something I'm calling a "marquee". When we're done, we'll have created the scaffolding for tasks to interact in all sorts of different the ways. Additionally, I'll share with you another alternative design for a non-preemptive scheduler called a dispatch queue that is simple to conceptualize and, like the time-triggered scheduler, can help you schedule some of your most difficult task sets.
Summary
Nathan Jones concludes his series by explaining four IPC techniques—mailboxes/queues, counting semaphores, the Observer pattern, and a lightweight "marquee"—and shows how to wire them into task scaffolding for non-RTOS systems. He also presents a clear alternative scheduler design: a dispatch queue non-preemptive scheduler and how it compares to time-triggered approaches.
Key Takeaways
- Implement mailboxes/queues to pass structured messages between tasks without an RTOS.
- Use counting semaphores to manage pooled resources and control access in constrained systems.
- Apply the Observer pattern to decouple producers and consumers and simplify event notification.
- Build a "marquee" mechanism for broadcast-style, low-overhead inter-task updates.
- Design and evaluate a dispatch-queue non-preemptive scheduler as a practical alternative to time-triggered scheduling.
Who Should Read This
Embedded firmware engineers (intermediate experience) building microcontroller systems without an RTOS who need practical IPC patterns and simple scheduler alternatives to manage tasks and resources.
Still RelevantIntermediate
Related Documents
- Consistent Overhead Byte Stuffing TimelessIntermediate
- PID Without a PhD TimelessIntermediate
- Introduction to Embedded Systems - A Cyber-Physical Systems Approach Still RelevantIntermediate
- Can an RTOS be really real-time? TimelessAdvanced
- Memory Mapped I/O in C TimelessIntermediate








