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.