Response Timing for User Interfaces

Proper timing in user interfaces often has more to do with the user's perception than with the actual passage of time.

How to Avoid Common Firmware Bugs

Understanding software and hardware bugs in other embedded systems can help you identify, diagnose, and fix bugs in your own.

Usability for Non-Graphical User Interfaces

The placement of knobs, buttons, and switches is as essential as the firmware to making a usable embedded system.

How to Design Software-Friendly FPGAs and ASICs

Designing firmware-accessible debugging resources into embedded systems provides a valuable supplement to hardware test and analysis tools.

How to Design a Software-Friendly DMA Module

These built-in troubleshooting resources for direct memory access (DMA) controllers can pave the way for smoother embedded software integration.

State Machines for Event-Driven Systems

State machines are perhaps the most effective method for developing robust event-driven code for embedded systems.

Introduction to Hierarchical State Machines (HSMs)

The formalism of Hierarchical State Machines (aka statecharts) makes the state machine approach truly applicable to real-life embedded systems.

Design by Contract (DbC) for Embedded Software

What is the Design by Contract programming philosophy, what can it do for you, and why should all embedded software developers care?

Patterns of Thinking in Software Development

 Printable PDF

Metaphors and analogies can be valuable tools for learning new software concepts and tapping subject matter expertise during embedded software development.

How to Code a State Machine in C or C++

A state machine is any object that behaves different based on its history and current inputs.  Many embedded systems consist of a collection of state machines at various levels of the electronics or software.