September 2019: State Machines and

Welcome to the September 2019 edition of the Embedded Artistry Newsletter! This is a monthly newsletter of curated and original content to help you build superior embedded systems. This newsletter supplements the website and covers topics not mentioned there.

This month we'll cover:

  • State machine resources, libraries, and tooling
  • podcast's huge milestone
  • Embedded news from around the web
  • Embedded job postings
  • Updates to the Embedded Artistry Website

State Machine Resources

This month we received multiple questions about state machines. State machines are an excellent area to study for embedded systems developers. Many embedded systems (or subsystems) can be modelled as state machines

If you're new designing state machines, you can learn more about them from expert Miro Samek and others:

We’re often asked about our favorite state machine code. Here are some of the best libraries:

We also answered questions this month about tools which can be used to model, verify, and generate code for state machines:

  • QM supports visual state machine modeling and code generation
    • The output code is targeted for the QP framework
  • Yakindu can model, verify, and generate code for state machines
    • The output code is not targeted to a specific library or framework
  • StarUML, PlantUML, and many other UML tools allow you to create visual models

We'll be turning this section of the newsletter into an article later this month. If you have any recommendations for state machine resources, libraries, or tooling, we'd love to hear from you.

Congratulations to for 300 episodes!, our favorite embedded systems podcast, just released their 300th episode! We want to say a heartfelt congratulations to Chris and Elecia. It takes an enormous amount of dedication and persistence to create such a long-running show.

To celebrate their milestone, Chris and Elecia are throwing a party on September 7 in Aptos, California. If you're interested in attending, you can RSVP here.

If you haven’t heard of the podcast, you can tune in at or in your favorite podcast app. Chris and Elecia are both embedded systems engineers. They started to support engineers, encourage diversity, celebrate the ethics of good design, and help demystify what engineers do. They also wanted to show how a career in engineering can evolve. With 300 episodes under their belt, they have definitely stayed true to these goals.

A lot of time and energy goes into each episode. We encourage you to support the podcast through Patreon or by purchasing merchandise. As a bonus to Patreon sponsors, you get access to a Slack group where you can interact with other embedded engineers and past podcast guests. We've found this group to be an extremely valuable resource for experiencing new perspectives and expanding our knowledge of embedded systems.

There have been so many wonderful episodes. Here is a small sampling of our favorites:

Around the Web

We’ve grouped our September reading recommendations by these categories:

  • Programming
  • Embedded
  • Hardware


John Regehr published a thorough guide describing how to write fuzzable code. If you're interested in applying randomized testing to your software, this is a great start.

All About Circuits published an introduction to virtual memory.

Burkhard Stubert discussed how data-driven unit tests are hard to understand.


Mohammad Afaneh published a detailed Bluetooth Low Energy Primer on the Interrupt blog.

The Memfault team expanded their Zero to main() series with notes on how to write a bootloader from scratch.

Steve Branam updated his excellent So You Want to Be An Embedded Systems Developer article with new resources.

Niall Cooling, of Feabhas, shared two articles with us from his archives: Setting up the Cortex-M3/M4 MPU, and Developing a Generic Hard Fault handler for ARM Cortex-M3/M4.

Confused by the differences in SPI operational modes? Stratify Labs has a helpful visual guide.

Qt will be launching a bare metal toolkit targeted for microcontrollers.

Memfault posted an approach to building a CLI for firmware projects using the Python Invoke package. featured an article discussing a logical method for debugging embedded systems.

Stratify Labs provides a straightforward strategy for reading floating pins.

Jacob Beningo published two articles about using JSON in embedded systems: Geetting Started with JSON for Embedded Developers and Using strstr to parse JSON Messages. featured an article by Jacob Beningo describing three device driver design techniques.


All About Circuits discussed tools and practices that can be used to reduce errors in your schematics.

This article surveying sub $0.10 microcontrollers has been circulating around Twitter and provides a look at the cheapest end of the microcontroller spectrum. The article was inspired by an article published last year: Making a Three Cent Microcontroller Useful.

Stratify Labs is publishing a series of articles to teach you the EE concepts needed for working with microcontroller-based circuits. The first three articles in the series are Ohm's Law for Makers, Kirchoff's Law for Maker's, and Equivalent Circuits for Makers.

All About Circuits shared an introduction to vibration energy harvesting as a source of power for electronics.

Job Postings

Apple, Inc.'s Hardware Test Engineering team is looking for an Embedded Systems Software Architect to lead the creation of a modular instrumentation platform. Are you convinced that with the right resources you could build a platform that will change an entire industry? Are you able to provide technical leadership across both the hardware and software realms? If so, contact Wei Wang to find out more.

At IRNAS, innovation lab for hardware and IoT products, based in Maribor, Slovenia, we are expanding our crew with an Embedded Software Engineer, who will collaborate on interdisciplinary development of telecommunication solutions, IoT systems, 3D bio-printing and more. Find out more about the open job position and apply by visiting this link.

Hiring Embedded Engineers?

Is your company hiring embedded systems hardware/software engineers? Send us a short job ad with a link to the full job description. We will be happy to include it in our next newsletter.

Website Updates

We expanded the Glossary with additional terms and links. We also fixed the "D" section, which had duplicate entries.

An RSS link has been added to both the blog side panel and newsletter archive side panel.

New Articles

We published the following articles in August:

These were our most popular articles in August:

  1. Creating a Circular Buffer in C/C++
  2. Demystifying Microcontroller GPIO Settings
  3. Jenkins: Configuring a Linux Slave Node
  4. For Beginners
  5. Mixing C and C++: extern C
  6. std::string vs C-strings
  7. C++ Casting, or: "Oh No, They Broke Malloc!"
  8. Installing LLVM/Clang on OSX
  9. An Overview of C++ STL Containers
  10. Migrating from C to C++: NULL vs nullptr

Thanks for Reading!

Have any feedback, questions, suggestions, interesting articles, or resources to recommend to other developers? Simply reply to this email!

While you're waiting for our next edition, check out the website or follow us on Twitter.

Happy hacking!

-Phillip & Rozi