For novel ideas about building embedded systems (both hardware and firmware), join the 40,000+ engineers who subscribe to The Embedded Muse, a free biweekly newsletter. The Muse has no hype and no vendor PR. Click here to subscribe.

Articles About Embedded Systems By Subject

Jack Ganssle's articles about embedded systems are cataloged here. Also see this page for more.

There are a lot of articles here; so much it can be hard to find what you're looking for, but they are searchable.

Analog, Filtering, etc.

  • Convolutions - Convolutions are a really cool way to smooth and even differentiate data. You gotta check this out.
  • Minimizing Analog Noise - Analog noise is a tough problem. Here are a few ways to minimize it.
  • Radio Days - Radios and noise reduction
  • Self Calibrating Systems - Here's an algorithm to make an instrument read correct values without ever manually setting gain and offset coefficients.
  • Smoothing Digital Inputs - There's a lot of way ways to debounce digital inputs. A few are listed in this article.
  • Taming Analog Noise - Here's a few ways to use smart software to reduce the amount of noise in your system.

Communications

  • Bit Banging - You don't need a UART to send and receive serial data. Software alone suffices. Here's the code.
  • Data Compression - Transmission bandwidth is always limited (hey... if you're reading this over a 28.8kb link, you get the picture!). Data compression can help a lot.
  • Serial Data Transmission - Here's a primer to using UARTs in embedded systems.
  • USB - An overview of embedded USB

Debugging Embedded Systems

 

Fun Embedded Systems

Hardware

  • 8 and 16 Bit Microcontrollers - A look at the state of smaller CPUs
  • A Rumble and a Wave - The Japanese earthquake may cause a wafer shortage. But what are wafers and how are they made?
  • An Example of Foolishness - Jack lays out the basic rules of troubleshooting anything.
  • ARRL Handbooks - A review of one of the finest hardware handbooks.
  • Asynchronous Hardware-Firmware - External events that are changing (analog inputs, timers, encoders and many other sources) often sometimes confuse the code. Few developers understand how to read these simple inputs reliably.
  • Beginner's Corner - In-Circuit-Emulators - A beginner's guide to the best debugging tool of all, the in-circuit emulator.
  • Beginner's Corner - Reentrancy - A beginner's guide to reentrancy issues.
  • Boolean Algebra - Do you get the boolean blues? Those hardware weenies keep chatting about DeMorgan, truth and evil... and you're feeling left out? Read on.
  • Bus Cycles - Software folks need to understand how a microprocessor handles data on its busses. Here's the short intro.
  • Computing CRCs in Parallel - How to use a PLD to figure CRCs in a single clock cycle.
  • Drawing Systems - Most small companies never organize their drawings in a logical fashion, and instead all-too-often rely on memory when building production units. Here's an easy system that will get your drawings in order.
  • Electromagnetics for Firmware People - Maxwell's Laws really are important for firmware development. Here is an introduction.
  • Encoders - Want to learn more about measuring position? Read this article.
  • Green Motor Control - As a designer, you can make decisions that greatly impact the environment. Here's how to save energy.
  • Hardware for Better Firmware - A few changes to the system's hardware design can greatly improve the code.
  • Interrupt Latency - Do you really know what latency is? Where it comes from? How to measure it? Here's guidelines.
  • Is Hardware Reliable - How reliable is hardware anyway? Intel's telling us not to expect our CPUs to actually work . . .
  • Metastability and Firmware - A very subtle reentrancy-like situation develops when software needs two or more reads of hardware to input a value.
  • Multicore: Hype or Reality - Shedding some light on vendor claims about multicore.
  • Multiplying Monitors - Multiple monitors == increased productivity.
  • New Hardware - Suggestions for bringing up a new hardware design.
  • Pipelines and Prefetchers - All modern processors use pipelines and/or prefetchers to increase performance. Here's how they work.
  • Position Encoders - Encoders transmit position or frequency info to the computer. Here's a few ways to make life with them easier.
  • Power Management - Managing power in embedded systems is getting extremely complicated - and effective.
  • Prototyping with SMT - One person's experience with using SMT devices on prototypes.
  • Read That Datasheet - Never assume a part has certain electrical or timing parameters. Often little surprises lurk. Did you know that virtually all microprocessors do not accept TTL levels for clock and reset?
  • Refreshing Software - Refresh is yet one more thing that software can, in some situation, replace.
  • Resistors - Be careful how you design resistors and R-packs into your digital circuits. This article tells how.
  • Smoothing Digital Inputs - There's a lot of way ways to debounce digital inputs. A few are listed in this article.
  • The Fine Art of Prototyping - How to build really useful prototypes.
  • The Zen of Diagnostics - part 1 of a two part series on embedded diagnostics
  • The Tao of Diagnostics - part 2 of a two part series on embedded diagnostics
  • VCO Based Sensors - VCOs can form a clever way to digitize analog data.
  • Watchdogs Redux - Watchdog timers are a critical part of your system
  • What Goes In Must Come Out - FIFOs are hardware analogs of a sort of reverse stack. Here's how they work.

Historical Embedded Systems

Managing, Scheduling, Tracking Embedded Systems

Math

  • Embedded Trig - Here's some algorithms to make it easier to compute complex trig functions.

Memory

Philosophical and Career

  • As Good As It Gets - Why is it so hard to build great code? Musings on software failures.
  • At Sea - Embedded Systems at sea
  • Chaotic Systems - The new science of chaos is fascinating in its own right, and may have important implications for designers of embedded systems.
  • Crash and Burn - Disasters, and what we can learn
  • Depot Repair - Thoughts on our throwaway economy, and our role in it.
  • Disaster - A description of some embedded disasters, and what we can learn from them.
  • Do You Need A Degree - Is a degree needed? Useful?
  • Engineering Ethics - We engineers build systems that profoundly impact people's lives. Strong ethics are the most important tool we have to keep our customers safe from misbehaving products.
  • Farewell, ESD - My final column in the last print edition of Embedded Systems Design magazine.
  • Guestimating - Sometimes close enough is good enough
  • Habits - The 7 Habits of Highly Dysfunctional Developers
  • How Microsoft Saved The World - The Big Bad Beast or a a force of good? Jack's inviting flames by claiming that without Microsoft we would still be computing on our fingers and toes.
  • Kids - In praise of kids these days
  • Kids These Days - Back in my day, we had to build our own equipment.
  • Living to Learn - A philosophy of never having to say you're done with school
  • Magic - an article about our society's inability to embrace the new technologies we techies create.
  • Memo To My Boss - Jake Schmidt quits and fires off a memo to his ex-boss. It's flaming, but full of useful lessons.
  • Memorial Day - Years in the future a wealthy man looks back on how the embedded world collapsed.
  • Momisms - Things your mom should have taught you
  • Non-Degreed Engineers - How important is a degree in this industry?
  • Open Source? - Opening the open source debate
  • Passion and the Developer - Use reason, not emotions.
  • Programming Quotations - A number of good quotes about this field.
  • Promise Management - We make lots of promises to our boss, our employees, spouse and children. Promises are a sort of social currency. Manage them properly or they'll lose their value.
  • Protecting Your IP - What's the deal with patents?
  • Religious Wars - Choosing a programming language is a place where people often get really dysfunctional.
  • Robots Everywhere - What happens when robots can build robots?
  • Saving Your Career - Tips on managing your career.
  • Sell Yourself - Guidelines for writing a resume.
  • Shared Perceptions - On a stop in Bermuda, Jack meets a wizened ex-developer. Over too many drinks several interesting lessons emerge.
  • Small is Beautiful - Small Processors dominate this industry. This is why.
  • Survival of the Fittest - Do you work hard? How about smart? This article might make you mad, but hopefully it's start some ideas flowing. Feel free to send flames to us via email!
  • The C Blues - C is still a long way from what we embedded folks need in a language. Here's some ideas and complaints.
  • The End of Days - Thoughts about the Great Recession.
  • The Future of Embedded Programming - Here's a set of prognostications about programming in the future. Read 'em and weep.
  • The Vote - This article, written in 2002, discusses how Bubba "the can man" won the 2004 presidential election.
  • Understand Your User's Needs - Understand your user's needs; only then can you be sure the code is useful, as well as correct.
  • What Makes Embedded Different? - How are embedded systems different than regular computers?
  • When the Thrill is Gone - Life has a funny way of changing the obvious...
  • Will The Torch Be Passed? - Where will the next generation of engineers come from?

Real-Time and High Speed

  • A Call For Modern Compilers - Most compilers are crap in terms of giving us info about the time domain.
  • An OS in a Can - Using a commercial RTOS will save big bucks... and is rather fun.
  • Asynchronous Hardware-Firmware - External events that are changing (analog inputs, timers, encoders and many other sources) often sometimes confuse the code. Few developers understand how to read these simple inputs reliably.
  • Beginner's Corner - Reentrancy - A beginner's guide to reentrancy issues.
  • Coding ISRs - Handling interrupts is tricky at best. Here's a few suggestions.
  • Design For Performance - Make the system as fast as it needs to be!
  • DSP - An introduction to Digital Signal Processing.
  • Interrupt Latency - Do you really know what latency is? Where it comes from? How to measure it? Here's guidelines.
  • Interrupt Predictability - How do you know if your ISRs will be fast enough?
  • Metastability and Firmware - A very subtle reentrancy-like situation develops when software needs two or more reads of hardware to input a value.
  • Perform or Perish - How do you deal with software performance problems?
  • Real Time - The basics of real-time programming
  • Speed Kills - Data comm over cheap serial links might be more cost effective than other, faster, options.
  • The Perils of NMI - NMI is a critical resource, yet all too often it's misused.
  • Two Completely Unique Products - uC/Probe and the Propeller are two amazing products.
  • What Happens at 100Mhz? - At very high speeds we'll have to change debugging strategies. Here's some ideas.

Sailing Stories

  • Sailing stories, linked here by popular demand

Software

  • A Matter of Style - We tend to be bad a living up to promises we make - even to ourselves. It's important to change the whole approach.
  • Assume Nothing - Bad stuff happens. We developers are supposed to anticipate these problems.
  • Awesome Functions - How to write a clean, tight and bug-free function.
  • Bailing Frantically - In panic mode? You'll never exit it till you take time to stop bailing and plug the leaks.
  • Comments on Commenting - Rules for creating awesome comments in your code.
  • Crafting Prototypes - Advice on building software prototypes.
  • Deconstructing XP - eXtreme Programming has some fabulous ideas. And some really dumb ones. This is a review of two XP books.
  • Engineering Ethics - We engineers build systems that profoundly impact people's lives. Strong ethics are the most important tool we have to keep our customers safe from misbehaving products.
  • Extreme Embedded - A look at eXtreme Programming.
  • Fire Code for Software - As a collector of software disasters - why is there no fire code for software?
  • Globals - Advice about using - and avoiding - global variables.
  • Inspections - What's the best way to debug? Don't put bugs in in the first place.
  • Interactive Design - Build your system incrementally. Here's some tips.
  • Jack's Rules of Thumb - Engineers use rules of thumb to quickly estimate rather than do detailed calculations. Firmware can benefit from the same idea. Here's a sampling of such rules.
  • Lints - Lint is one of the most useful tools around.
  • Longevity Planning - Do you have a backup system?
  • Measuring Bugs - If you don't measure bug rates you'll never improve your coding. Besides, the right measures will accelerate the schedule.
  • MISRA - The MISRA standard defines rules for the safer use of C.
  • Momisms - Things your mom should have taught you
  • Naming Conventions - Rules with which to name variables and functions.
  • On Measurements - Managers chant "If you can't measure it, you can't manage it." What should we measure in firmware development?
  • Perfect Software - Perfection is hard, but we can get to Pretty Darn Perfect.
  • Picking a CPU - How do you decide what CPU to use? Here's some factors to consider.
  • Programming Style - Programming style is just as important as any other parameter that goes into a coding task. Here are a few ideas, rants, and raves.
  • Promise Management - We make lots of promises to our boss, our employees, spouse and children. Promises are a sort of social currency. Manage them properly or they'll lose their value.
  • Shared Perceptions - On a stop in Bermuda, Jack meets a wizened ex-developer. Over too many drinks several interesting lessons emerge.
  • Software For Dependable Systems - A striking report may change how you think about systems.
  • Taming Complexity - We can use cyclomatic complexity to generate better code.
  • Tools For Clean Code - There are a lot of tools around that will automatically check our code. Efficient developers automate everything they can. Experts know that firmware is so expensive that any code-auditing tool is a great thing.

Tools

  • A Plea to Compiler Vendors - Compilers miss the mark on real-time issues
  • A Volatile Business - A look at 2008 survey data of this industry, and also at a problem many compilers have with the "volatile" keyword.
  • Beginner's Corner - In-Circuit-Emulators - A beginner's guide to the best debugging tool of all, the in-circuit emulator.
  • Built-in Debuggers - More and more processors have built-in debugging resources. Here's a look at what features they offer.
  • C for Microcontrollers - This article discusses the state of C for controllers circa 1990.
  • Embedded - a Volatile Business - Market facts, and a startling problem with volatiles in C.
  • Embedded Lingos - How do you pick a language? Here's some thoughts about C++
  • Emulators - The basics of the In-Circuit Emulator
  • Examining Your Most Important Tools - Which tools do you use the most?
  • Java - Ready for Prime Time? - Is Java really the next silver bullet for embedded programming?
  • Language Selection - Thoughts on selecting a programming language
  • Oscilloscope Update - The wise embedded engineer will be a master of many tools. The scope is one of the most important.
  • Religious Wars - Choosing a programming language is a place where people often get really dysfunctional.
  • The C Blues - C is still a long way from what we embedded folks need in a language. Here's some ideas and complaints.
  • The Good Guys - Here are a few great products for managing spam, backups, network security, and even a cool CAD package.
  • The ICE Blues - Using an emulator? Here are some gotchas to watch out for.
  • Tool Quest - Decent tools have less than zero cost... if you make more than a dollar an hour.
  • Tools For Clean Code - There are a lot of tools around that will automatically check our code. Efficient developers automate everything they can. Experts know that firmware is so expensive that any code-auditing tool is a great thing.