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.
- 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.
- 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
- A Different Take on Asserts - The assert is a well-known proactive debugging tool. Why not extend the concept to deal with real-time issues.
- An Example of Foolishness - Jack lays out the basic rules of troubleshooting anything.
- As Good As It Gets - Why is it so hard to build great code? Musings on software failures.
- Built-in Debuggers - More and more processors have built-in debugging resources. Here's a look at what features they offer.
- Debuggable designs - Tips for improving hardware designs
- Debugging ISRs - Part 1 - This is part 1 of a two part series on debugging interrupt service routines.
- Debugging ISRs - Part 2 - This is part 2 of a two part series on debugging interrupt service routines.
- Developing a Good Bedside Manner - Thoughts about being a great debugger.
- Emulators - The basics of the In-Circuit Emulator
- Measuring Bugs - If you don't measure bug rates you'll never improve your coding. Besides, the right measures will accelerate the schedule.
- Oscilloscope Update - The wise embedded engineer will be a master of many tools. The scope is one of the most important.
- Proactive Debugging - Seed your code with simple tricks to find bugs
- The ICE Blues - Using an emulator? Here are some gotchas to watch out for.
- The Tao of Diagnostics - part 2 of a two part series on embedded diagnostics
- The Zen of Diagnostics - part 1 of a two part series on embedded diagnostics
- Tricks of the Trade - Troubleshooting hints and kinks.
- Troubleshooting 101 - Troubleshooting is more art than science. Here's some ideas.
- Troubleshooting - Troubleshooting is a mental exercise requiring a firm grasp of the technical concepts involved, along with the right philosophy.
- Vanishing Visibility - Smaller CPUs create all sorts of tool issues.
- The Case of the Crashing 68000 - a fun detective story about embedded systems
- Jake Busts Out - Jake busts out of jail to help the VCs get a product to market.
- Memo To My Boss - Jake Schmidt quits and fires off a memo to his ex-boss. It's flaming, but full of useful lessons.
- The Secret of My Success - Our hero takes on another project... heh heh
- Toastal Lessons - Our hero designs a mechanical toaster, that morphs into a net-connected 32 bit monster
- 2028, A Dystopian Story - They're getting near. I'm in hiding.
- After 500,000 Words - A look back on 20 years of writing for Embedded Systems Design magazine
- An Accumulation of Stuff - Smart bearings, LDRA, the iPad and other thoughts.
- An Interview With James Grenning - Part 1 - James Grenning of TDD fame shares his thoughts.
- An Interview With James Grenning - Part 2 - James Grenning of TDD fame shares his thoughts.
- Aprils Fools - So you have a backup strategy?
- Call Me Ishmael - Lessons from failures on a small boat at sea.
- Definitions - Funny definitions of common embedded terms.
- Dear Abbey - Abbey talks to developers about building embedded systems.
- Firmware Disasters - Test like you fly, fly what you have tested!
- Disasters Redux! - Those who forget history are condemned to repeat it.
- Memorial Day - Years in the future a wealthy man looks back on how the embedded world collapsed.
- Quirky Chips - There have been some strange microprocessors introduced over the years!
- The Vote - This article, written in 2002, discusses how Bubba "the can man" won the 2004 presidential election.
- 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.
- 10 Years After - My 120th column for ESP and what I've learned
- 20 Years On - Embedded Systems Design's 20th anniversary
- 99 Years Ago This Month - A look back to the technology of 1907
- Legacy Memory - The ecolution of computer memory technology.
- Looking Ahead - reflections on ESD's 40th anniversary in the year 2028.
- A Look Back - A look at the history of our industry
- An Embedded Life - Jack looks back on 30 years of building embedded systems.
- Core Memory - A story about the ancient past of computers.
- Digital Engineering is More Fun - Core Memory was all we had years ago. It's interesting stuff.
- Engineering Apollo - Books about the development of Apollo.
- Ham Radios Demise - A lot of us got into electronics via Ham Radio. That's not so common now.
- Looking Ahead - reflections on ESD's 40th anniversary in the year 2028.
- The Olden Days - Before CAD we pushed our pencils in the snow, uphill both ways.
- The Transistor - Celebrating 60 years of transistors.
- When Computers Were Human - In the early days "computer" meant a person doing manual calculations.
Managing, Scheduling, Tracking Embedded Systems
- A Boss's Quick Start to Firmware Engineering, Part 1 - Most bosses don't understand the issues involved in producing great firmware. Show them this.
- A Boss's Quick Start to Firmware Engineering, Part 2 - Show them more.
- A Value Proposition - Unfulfilled
- A Volatile Business - A look at 2008 survey data of this industry, and also at a problem many compilers have with the "volatile" keyword.
- Assigning the Blame - End each project with a Postmortem; feedback stabilizes systems!
- Bailing Frantically - In panic mode? You'll never exit it till you take time to stop bailing and plug the leaks.
- Boss Management - Bosses need to be managed too.
- Business 101 - You can't be an effective engineer unless you understand how your engineering role impacts the business as a whole. Step back, get a new zeitgeist, and expand your horizons a bit.
- Comments on Commenting - Rules for creating awesome comments in your code.
- Consulting as a Career - Thoughts on entering consulting.
- Faster! - Time to market dominates. We need new development approaches.
- Guardian Angels - Every project needs a guardian angel, someone who watches over the code.
- I, Consultant (part 1) - Here's how to get rich quick: quit your job, become a consultant, and charge $90/hour. NOT!
- I, Consultant (part 2) - This is a follow-on the the previous article. Stay tuned for part 3.
- I, Consultant (part 3) - Yet another follow up
- I, Consultant (part 4) - The last follow up... I sure hope.
- I, Consultant (part 5) - The last follow up. Fer Sure.
- 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.
- Jack's Top Ten - The top reasons projects fail.
- Keep it Small - Get the product out faster by better partitioning
- Lies, Damn Lies, and Schedules - Schedules fail for a lot of reasons, one of which is rampant dishonesty.
- Lies and Schedules - Reviews of a number of books about scheduling.
- Memory is a Fragile Thing - Thoughts on remembering.
- Musings on People - Process and people - good management takes good care of the people.
- On Management - Thoughts on managing development
- On Measurements - Managers chant "If you can't measure it, you can't manage it." What should we measure in firmware development?
- Picking a CPU - How do you decide what CPU to use? Here's some factors to consider.
- 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.
- Resource Hunters - A huge part of engineering is finding information and sources. Here's some hints.
- Scheduling - It is possible to create accurate schedules, here's how.
- Schedule Madness - Most schedules are dysfunctional
- Scheduling Momisms - Rules about scheduling your mom probably taught you.
- The Great Disconnect - Why scheduling will always be problematic.
- The Organized Bench - Lab pigs beware! This is your 12 step plan to recovery.
- The Z80 Lives! - The Z80 and its derivatives continues to be tremendously successful. Here's the current state of the art.
- Toastal Lessons - Our hero designs a mechanical toaster, that morphs into a net-connected 32 bit monster
- Understand Your User's Needs - Understand your user's needs; only then can you be sure the code is useful, as well as correct.
- The Great Disconnect - Why scheduling will always be problematic.
- Embedded Trig - Here's some algorithms to make it easier to compute complex trig functions.
- 386 Protected Mode - Part 1 of a two part article about protected mode.
- 386 Protected Mode - Part 2 of a two part article about protected mode
- Banking Basics - Ideas to help you expand your system's address space.
- Big Systems - Another piece on using x86 Protected Mode.
- Built-In Diagnostics - No system is useful unless it can be built in production. Add simple diagnostics.
- DMA - Too many of us don't really understand DMA. Read on...
- Huge Data on the Z180 - The Z180's banking scheme is great for handling code; data is a bit more complex. Here's example code.
- Memory as a Device - Clever use of memory devices can really enhance your products.
- Non-Volatile RAM - How to manage battery backed up RAM
- Pipelines and Prefetchers - All modern processors use pipelines and/or prefetchers to increase performance. Here's how they work.
- Reentrancy - Most real time systems require a certain amount of reentrant code, yet too many programmers have no idea what this entails
- Refreshing Software - Refresh is yet one more thing that software can, in some situation, replace.
- Relocatable Code - Some embedded code must run at more than on address.
- Testing RAM - How to test system RAM.
- Thanks for the Memories - Here's some advice about testing RAM and ROMs in your embedded system.
- Using the Z180 MMU - Extend your Z80 address spaces to 1 Mb with the Z180.
- Wandering Pointers - Code crashes and dangling pointer tips
- 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?
- 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, linked here by popular demand
- 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.
- 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.