How-to articles about the design of safe and reliable embedded systems.

How to Improve Product Usability

Product usability problems require the engineer to take off his engineering hat and think more like a user.

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.

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.

How to Have Polymorphism Without a Heap

Rethinking basic programming techniques can avoid many of the problems that heap-based memory management poses for embedded real-time system designs.

Mutexes and Semaphores Demystified

In this first installment of a series of articles on the proper use of a real-time operating system (RTOS), we examine the important differences between a mutex and a semaphore.

Bug-Killing Coding Standard Rules for Embedded C

A C coding standard can help keep bugs out of embedded software by leveraging common language features and development tools.

More Bug-Killing Coding Standards for Embedded C

This second article on enforceable coding standards for embedded systems adds a set of additional bug-killing rules for using certain C keywords and naming global variables.