Dojo Five Dev Blog
Best-in-class embedded firmware content, resources and best practices
The Ultimate Guide to Modern Embedded Firmware Development
From the smart devices in our homes to life-saving medical equipment, embedded systems are everywhere—and at the heart of each one lies embedded firmware. But as these systems become more powerful and connected, developing efficient, secure, and scalable firmware is more challenging than ever.
Latest articles
Be The Cppcheck Ruler
The Git Cherry-pick and Git Rebase Interactive Combo
Sign up to get our content updates!
Unlock the full potential of your embedded projects with our expert insights! Dive into our comprehensive resources to stay ahead in firmware development. Subscribe now to get the latest best practices and guides delivered straight to your inbox.
More From the Blog

Docker: An Ideal Development Environment
Docker is a revolutionary tool that provides speed and repeatability for an embedded team. While traditionally used in non-firmware environments, there is enormous potential to improve the development efforts of

Cross-Functional Team Collaboration From An Engineer’s Perspective
Due to the complexity of a firmware project, it requires the involvement of teams with diverse expertise. The success of a project is dependent on the interaction between the teams.

Best Tools for Firmware Developers in 2025
This blog post will touch on some of the best and most useful Firmware development tools. Before we begin, there are a few caveats to be aware of. The “Best”

The Role of Version Control in Modern Firmware Development
Version control, also known as source control, is a tool that tracks and manages changes to files in a software project. It has been widely practiced by software teams to

Setting Up Automated Firmware Builds
Developers and managers can trust firmware releases by automating their build process.

How CI Pipeline Scripts and Exit Codes Interact
What is An Exit Code? An exit code, sometimes called a return code, is a number returned by a shell command or script. It tells the caller the status of

How To Protect Your Firmware: 5 Mistakes To Avoid
By: Joe Schneider
You put a massive amount of time, energy, and cost into developing your firmware. As such, protecting your firmware should be a top priority. Avoiding these 5 mistakes will help ensure your firmware stays secure.

Dev Containers
Docker is well-known and is widely used in the software application realm. In recent years, it has made its way into many embedded software projects. In embedded development, it is

How to Avoid Pushing In-development Changes to The Production Repository
Once a code base is sophisticated enough to require both a public, customer-facing production environment and private development environment, it becomes vital to prevent potentially breaking development changes from being

Documenting System Architecture With AsciiDoctor
By: Steve Branam
As the adage says, a picture is worth a thousand words. Diagrams provide a high level of information abstraction. Somewhere between zero and too much is the sweet spot for the right amount of documentation for a system, balancing the needs of development, quality, cost, and effort.

Comparing CAN, CAN-FD, and CAN-XL
Intro CAN, or Controller Area Network, is a popular communication standard in the automotive industry that has come a long way since its inception back in the 1980s. It has

Power Optimization Techniques for Firmware
Introduction Power efficiency is a critical factor in the success of modern embedded systems, especially for battery-powered devices. Efficient firmware design can significantly extend battery life, reduce heat, and improve

What is Dojo Five reading in June 2025?
“Dojo” translates to “place of the way” and represents an environment for immersive learning. Here at Dojo 5, we prioritize that learning by encouraging our engineers to always be on

Selecting an RTOS, Which Should I Use?
Introduction So, you’re kicking off a new embedded project, congrats! Whether you’re wrangling sensors, spinning motors, or just trying to blink an LED and talk to the cloud at the

10 Easy Steps to Add Static Analysis to Your Firmware Build
When it comes to embedded system applications, security is one of the most important requirements. In addition to embedded security topics such as Bluetooth encryption, SSH, and TLS, modern firmware

Making Embedded Communication Reliable: A Reusable COBS Library
What is the issue? Embedded systems often communicate over serial connections like UART, SPI, or USB. These communication channels are prone to issues when binary data gets misinterpreted as control

Documentation Done Right: Why Firmware Teams Need Robust Documentation
Why is Documentation so Important? When you are deep in the weeds working on a project, it’s easy to think “There’s no way I could ever forget how this code

Best Practices for Bluetooth Low Energy (BLE) Product Design
Designing products with Bluetooth Low Energy (BLE) technology presents unique challenges that can make or break your embedded project. Project managers overseeing BLE implementations need to understand both the technical

How to Align External Firmware Development Teams with your Internal Engineering Process
In today’s fast-paced product development landscape, many companies turn to external firmware development teams to accelerate time-to-market, access specialized expertise, and manage workload fluctuations. However, one of the biggest challenges

Trusting the Docker Images Your Code is Built On
We’ve written before about the benefits of using Docker in your development environments. You don’t have to write every image yourself, though! There are many existing images on Docker Hub

nRF52 DFU and the Missing Service Changed Indication
Even when using Nordic’s pre-packaged SDK files for adding DFU (Device Firmware Update) capabilities, things can get tricky. We learned this as we added buttonless DFU to a customer project

Nanopb Traps and How to Avoid Them
Intro Protobuf is a language-neutral, platform-neutral extensible mechanism for serializing structured data protocol that Google initially created internally in 2001, now on its 3rd release (Proto 3). Since its release,

Using Rust Packages in a C Project on Nordic Devices
This example shows how to call a function from a Rust package from C on a nRF5340 DK and nRF52840 DK.Source: https://www.rust-lang.org/ Why would you want to use Rust? Rust

An Introduction to Rust
Overview So you’ve heard about Rust, a shiny new tool taking people by storm, and now you want to know what the fuss is all about. Rust is a programming

Beat the Clock: CI Secrets for On-Time Embedded Systems
Getting Continuous Integration (CI) right in embedded systems development is challenging. It’s a game-changer for meeting deadlines, but only if you nail the tech and the teamwork. Building Your CI

DITAA Color Codes For Diagrams: Using Color To Help Separate Items In DITAA Diagrams
By: Steve Branam
DITAA is a simple text format that allows the creation of free-form custom diagrams.

Powering Product Roadmaps with Modern Embedded Firmware Development
Product roadmapping is the strategic backbone of innovation, outlining the vision and direction for product development. But embedded firmware development often presents challenges that can slow down this process. By

Setting Up Automated Firmware Builds
Why do you need automated firmware builds (sometimes called a Continuous Integration (CI) pipeline) for your embedded project? Oftentimes we have found that customers do not trust their firmware release

Using Artifactory for Efficient Artifact Storage
Introduction Managing software artifacts efficiently is a critical challenge for software development teams. Whether you are dealing with versioning issues, dependency management, or maintaining previous builds for rollback and debugging,

Introduction to Serial Framing Formats
Introduction Serial communication (UART, RS-232, SPI, I2C, etc) provides the ability to transfer raw data between devices in Embedded Systems. There are a number of challenges to consider when developing

Upgrading Your Control System: Replacing your existing PLC with Arduino OPTA
In the world of industrial automation and control systems, Programmable Logic Controllers (PLCs) have been the go-to solution for decades. They offer reliability, stability, and robust performance. However, with advancements

How To Protect Your Firmware: 5 Mistakes To Avoid
You put a massive amount of time, energy, and cost into developing your firmware. As such, protecting your firmware should be a top priority. The best way to protect your

What is Dojo Five Reading in April 2025?
“Dojo” translates to “place of the way” and represents an environment for immersive learning. Here at Dojo 5, we prioritize that learning by encouraging our engineers to always be on

Useful Python Packages For Parsing HTML Report
Static analysis tools such as IAR C-STAT, Cppcheck, and Flawfinder are able to generate reports in the form of HTML files. To learn how and why it is necessary to

What is TLS and When Can It Be Used?
Transport Layer Security (TLS) is a cryptographic protocol that provides secure communication over computer networks. It is the successor to the Secure Sockets Layer (SSL) protocol and has become the

Setting up Jenkins for Embedded the right way (or not at all)
By: Brandon Leiran
Embracing continuous integration (CI) practices and tools makes embedded development smoother. Jenkins isn’t always the best choice for Embedded CI, but if you follow the 3 CI principles laid out in this article, you’ll start off well!

How to Start Developing Firmware Remotely
Modern embedded development starts with modern practices. Remote work has revolutionized the way that engineering is done, and it is now more possible than ever for traditionally on-site work to

The CLI’s Essential ‘Verbose’ Option
For those creating their own CLI tool If you have played around with any command line interface tools, such as Particle CLI or Git UI, you’ll notice that they oftentimes

How to Modify a File Using SED
Let’s take a look at a microchip project that was found to cause issues in the past. Upon trying to build the problematic example it was found that one of

Device Updates: Cut Down Time and Data Usage
Have you ever suspected that the way updates are handled on your embedded devices wastes electricity, drives up customer cellular data bills or takes longer than really needed? Let’s look at how device updates have traditionally been done…

How to Prevent Your Python Script From Getting Culture Shock in Different OS’s
After hours of focusing, you finally finish writing a Python script for your project. It works perfectly on your computer and you pushed the changes to your favorite source control

Transitioning from Bare Metal: Nordic SDK Build System
Intro As embedded systems complexity grows, firmware development needs more and more tools and build systems to handle it. One common reason to switch from bare metal to a more

Finding Time for Rust: 7 Simple Steps to Learn Rust
By: Nwanua Eluweze
Rust appears to be gaining steam as a solid language to solve complex and challenging problems in embedded systems. Here are a few tips that may help you learn Rust.

What does a modern pipeline look like for embedded?
What does a modern pipeline look like for embedded? Featured Categories Our Engineers Security Embedded CI All Categories Recent Posts By: Aaron Fontaine Having a modern pipeline helps automate the tools you need to ensure high software quality and consistent results. Although the cost of setup is higher, once a modern pipeline (and corresponding practices)…

Hardware-in-the-loop is hard! Sometimes.
By: Ander Galisteo, Ph.D.
The concept of hardware-in-the-loop (HIL) is not new in the embedded space. The basic idea is to automate the functional tests of your device under development to verify if your implementation does what it’s supposed to do.

BDD for Embedded Systems
Introduction Behavior-Driven Development (BDD) is a software development methodology that focuses on defining the behavior of a system in plain, human-readable language. While commonly associated with end user business requirements

Using the QEMU Emulator with Zephyr Builds and VSCode
QEMU is an open source machine emulator/virtualizer. Most commonly it’s used for system emulation where it can provide a virtual model of an entire machine (CPU, memory, and emulated devices).

Medical Device Documentation
If you’ve ever built a medical device, you’ll know how much documentation is required. The amount of documentation required by regulatory bodies like the FDA can intimidate even the most