
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...

AI at the Edge - Can I run a neural network in a resource-constrained device?
Hello Related Communities, This is my first time blogging since joining Stephane in November. He and I were at Embedded World together and he asked me to write about some of the important trends as they relate to all of you. I expect to post...

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 Deep Insight Analysis for RTOS Based Applications
Over the past several years, embedded systems have become extremely complex. As systems become more complex, they become harder and more time consuming to debug. It isn’t uncommon for development teams to spend more than 40% development cycle...

Ten Little Algorithms, Part 6: Green’s Theorem and Swept-Area Detection
Other articles in this series: Part 1: Russian Peasant Multiplication Part 2: The Single-Pole Low-Pass Filter Part 3: Welford's Method (And Friends) Part 4: Topological Sort Part 5: Quadratic Extremum Interpolation and Chandrupatla's...

Donald Knuth Is the Root of All Premature Optimization
This article is about something profound that a brilliant young professor at Stanford wrote nearly 45 years ago, and now we’re all stuck with it. TL;DR The idea, basically, is that even though optimization of computer software to execute...

Intel 8088 - A blast from the past
The Intel 8088 is an 8 bit processor related to the 16 bit 8086. The Microcomputer class consisted of wire-wrapping the chips to perfboard using sockets.I had taken computers apart, soldered, etc., but had never used wire-wrapping to construct a...

Zebras Hate You For No Reason: Why Amdahl's Law is Misleading in a World of Cats (And Maybe in Ours Too)
I’ve been wasting far too much of my free time lately on this stupid addicting game called the Kittens Game. It starts so innocently. You are a kitten in a catnip forest. Gather catnip. And you click on Gather catnip and off you go....

Favorite Tools: C++11 std::array
Many embedded software and firmware projects must be developed to high standards of reliability. To meet these reliability requirements, firmware project teams will consider many design tradeoffs. For example, an engineering team may avoid...

The Other Kind of Bypass Capacitor
●1 commentThere’s a type of bypass capacitor I’d like to talk about today. It’s not the usual power supply bypass capacitor, aka decoupling capacitor, which is used to provide local charge storage to an integrated circuit, so that the...

Introduction to Microcontrollers - Interrupts
●1 comment[quicklinks] It's Too Soon To Talk About Interrupts! That, at least, could be one reaction to this chapter. But over the years I've become convinced that new microcontroller programmers should understand interrupts before being...

Ten Little Algorithms, Part 5: Quadratic Extremum Interpolation and Chandrupatla's Method
Today we will be drifting back into the topic of numerical methods, and look at an algorithm that takes in a series of discretely-sampled data points, and estimates the maximum value of the waveform they were sampled from.

Help, My Serial Data Has Been Framed: How To Handle Packets When All You Have Are Streams
●1 commentToday we're going to talk about data framing and something called COBS, which will make your life easier the next time you use serial communications on an embedded system -- but first, here's a quiz: Quick Diversion, Part I: Which of the...

Introduction to Microcontrollers - Timers
●2 comments[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...

Introduction to Microcontrollers - Further Beginnings
●3 commentsEmbedded Programming Basics This tutorial entry will discuss some further embedded programming basics that you will need to understand before proceeding on to the LED blinky and other example programs. We will do this by looking at the...

Introduction to Microcontrollers - Driving WS2812 RGB LEDs
●4 comments[quicklinks] This tutorial chapter is a bit of a detour, but I think an interesting and useful one. It introduces a bit of assembly language programming, and demonstrates bit-banging a tight serial data protocol. And it deals...

How FPGAs work, and why you'll buy one
●2 commentsToday, pretty much everyone has a CPU, a DSP and a GPU, buried somewhere in their PC, phone, car, etc. Most don't know or care that they bought any of these, but they did. Will everyone, at some future point, also buy an FPGA? The market size...

MSP430 LaunchPad Tutorial - Part 3 - ADC
●2 commentsIn this new episode of our journey into MSP430 I will explain the basics of Analog to Digital Conversion on the MSP430G2231.We will write a program that will read an ADC channel and will toggle some leds based on the result of the...

Review: Modern Software Engineering
This is actually a review of 3 books by Dave Farley, because they really form a set: Modern Software Engineering: Doing What Works to Build Better Software Faster (just released for 2022, 224 pages) Continuous Delivery: Reliable...

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 —...