C++ on microcontrollers 1 - introduction, and an output pin class
This blog series is about the use of C++ for modern microcontrollers. My plan is to show the gradual development of a basic I/O library. I will introduce the object-oriented C++ features that are used step by step, to provide a...
Introduction to Microcontrollers - Buttons and Bouncing
[quicklinks] What Is A Button? To your hardware, that is. As discussed in Introduction to Microcontrollers - More On GPIO, a button (or key, or switch, or any form of mechanical contact) is generally hooked up to a microcontroller...
Important Programming Concepts (Even on Embedded Systems) Part V: State Machines
Other articles in this series: Part I: Idempotence Part II: Immutability Part III: Volatility Part IV: Singletons Part VI: Abstraction Oh, hell, this article just had to be about state machines, didn’t it? State machines! Those...
Endianness and Serial Communication
Endianness is a consideration that is easily overlooked in the design of embedded systems. I myself am amply guilty of this oversight. It’s something you don’t ever have to worry about if you’re only working with a single...
There's a State in This Machine!
An introduction to state machines and their implementation. Working from an intuitive definition of the state machine concept, we will start with a straightforward implementation then we evolve it into a more robust and engineered solution.
Linear Feedback Shift Registers for the Uninitiated, Part XI: Pseudorandom Number Generation
Last time we looked at the use of LFSRs in counters and position encoders. This time we’re going to look at pseudorandom number generation, and why you may — or may not — want to use LFSRs for this purpose. But first —...
Introduction to Microcontrollers - Timers
[quicklinks] Timers - Because "When" Matters Computer programs are odd things, for one reason because they have no concept of time. They may have the concept of sequential execution, but the time between instructions can be...
Linear Feedback Shift Registers for the Uninitiated, Part IX: Decimation, Trace Parity, and Cyclotomic Cosets
Embedded Programming Video Course Shows How OOP Works Under the Hood
If you'd like to understand how Object-Oriented Programming (OOP) really works under the hood, here is a free video course for you: OOP part-1: Encapsulation: This first lesson on Object-Oriented Programming (OOP) introduces the concept of...
Introduction to Microcontrollers - 7-segment displays & Multiplexing
[quicklinks] Doing the 7 Segment Shuffle The 7 segment display is ubiquitous in the modern world. Just about every digital clock, calculator and movie bomb has one. The treadmills at my gym have 6 or 7, each one displaying 3 or 4...
Simulating Your Embedded Project on Your Computer (Part 1)
Having a simulation of your embedded project is like having a superpower that improves the quality and pace of your development ten times over! To be useful, though, it can't take longer to develop the simulation than it takes to develop the application code and for many simulation techniques "the juice isn't worth the squeeze"! In this two-part blog series, I'll share with you the arguments in favor of simulation (so, hopefully, you too believe in its value) and I'll show you what works (and what doesn't work) to help you to simply, easily, and quickly simulate your embedded project on your computer.
Understanding Yocto Project Layers: A Modular Approach to Embedded Systems Development
My friend, the compiler
Modern compilers were given great powers, but we don't always know where and when they'll use them. This may cause us to either worry needlessly or trust unjustifiably, as demonstrated by a little example in this post.
What I Learned From Crashing and Burning in Grad School
Have you ever felt so consumed by something that it started to crowd other parts of your life? So obsessed with success in a particular area that you could hardly think about anything else? I found myself in exactly that spot in 2018 when I first started graduate school; I wanted to succeed so badly that I worked myself to the bone and I let even my marriage and my health suffer in service to it. This state of being is, believe it or not, NOT conducive to success, in neither the long-term nor the short-term. But it took two authors and one pivotal book for me to understand that, to see the pit I had dug for myself, and to begin the path back out. In this blog, I want to share with you my journey in the hopes that you can avoid the mistakes I made.
Small or fast?
Developers of software for desktop computers take code optimization for granted. Embedded developers typically need to pay much more attention to the details
Stand-by or boot-up
Many factors affect the usability of devices - a key one is how long it takes to start up.
Write Better Code with Block Diagrams and Flowcharts
Reading and writing code without architectural diagrams is like trying to follow complex instructions without any explanatory pictures: nigh impossible! By taking the time to draw out the block diagrams and flowcharts for your code, you can help identify problems before they arise and make your code easier to design, write, test, and debug. In this article, I'll briefly justify the importance of architectural drawings such as block diagrams and flowcharts and then teach you what they are and how to draw them. Using two simple examples, you'll see first-hand how these drawings can significantly amplify your understanding of a piece of code. Additionally, I'll give you a few tips for how to implement each drawing once you've completed it and I'll share with you a few neat tools to help you complete your next set of drawings.
Memory Mapped I/O in C
Interacting with memory mapped device registers is at the base of all embedded development. Let's explore what tools the C language - standard of the industry - provide the developer with to face this task.
Important Programming Concepts (Even on Embedded Systems) Part II: Immutability
Other articles in this series: Part I: Idempotence Part III: Volatility Part IV: Singletons Part V: State Machines Part VI: Abstraction This article will discuss immutability, and some of its variations in the topic of functional...
Analyzing the Linker Map file with a little help from the ELF and the DWARF
When you're writing firmware, there always comes a time when you need to check the resources consumed by your efforts - perhaps because you're running out of RAM or Flash or you want to optimize something. The map file generated by your linker is...
Ten Little Algorithms, Part 2: The Single-Pole Low-Pass Filter
Other articles in this series: Part 1: Russian Peasant Multiplication I’m writing this article in a room with a bunch of other people talking, and while sometimes I wish they would just SHUT UP, it would be better if I could just...
Best Firmware Architecture Attributes
Architecture of a firmware (FW) in a way defines the life-cycle of your product. Often companies start with a simple-version of a product as a response to the time-to-market caveat of the business, make some cash out...
Data Types for Control & DSP
There's a lot of information out there on what data types to use for digital signal processing, but there's also a lot of confusion, so the topic bears repeating.I recently posted an entry on PID control. In that article I glossed over the data...
Thermistor signal conditioning: Dos and Don'ts, Tips and Tricks
In an earlier blog entry, I mentioned this circuit for thermistor signal conditioning: It is worth a little more explanation on thermistor signal conditioning; it's something that's often done poorly, whereas it's among the easiest...
MSP430 Launchpad Tutorial - Part 2 - Interrupts and timers
What is an "interrupt"? It is a signal that informs our MCU that a certain event has happened, causing the interruption of the normal flow of the main program and the execution of an "interrupt routine", that handles the event and takes a...
Graphical medicine
Although an appealing user interface is a good option for any device, in medical applications it can be a life saver.
Five Embedded Linux Topics for Newbies !
Are you an embedded systems enthusiast looking to broaden your horizons with embedded Linux? explore those 5 topics.







