EmbeddedRelated.com

Can an RTOS be really real-time?

Miro SamekMiro Samek February 7, 20262 comments

Real-Time Operating Systems are meant for real-time applications. But with conventional shared-state concurrency and blocking, can you honestly know the worst-case execution time of an RTOS thread?


Project Log: Pixelblaze Christmas Lights

Nathan JonesNathan Jones December 22, 20252 comments

Festive fun and the hacker spirit combine in my janky attempt to adorn my house with addressable LEDs! In this post, I show you how I used a Pixelblaze and a cheap strip of WS2811 RGB LEDs (and not a little bit of hot glue and paper clips) to make a super cool set of Christmas lights.


Getting Started With Zephyr: DTS vs DTSI vs Overlays

Mohammed BillooMohammed Billoo October 3, 2025

Devicetrees can be daunting for traditional embedded software engineers that are new to Zephyr. In this blog post, I address these fears and show how navigating Devicetrees can be much easier if you understand that they represent the layered structure of the underlying hardware.


Why Containers Are the Cheat Code for Embedded DevOps

Jacob BeningoJacob Beningo September 29, 2025

Embedded software teams have long accepted toolchain setup as “part of the job,” but it’s a hidden productivity killer. Manual installs waste days, slow onboarding, and derail CI pipelines with “works on my machine” issues. While enterprise software solved this years ago with containerization, many embedded teams are still stuck replicating fragile environments. Containers offer a proven fix: a portable, reproducible build environment that works identically on laptops and CI servers. No brittle scripts, mismatched versions, or wasted time—just code that builds. IAR has gone further by delivering pre-built, performance-tuned Docker images for Arm, RISC-V, and Renesas architectures, ready for GitHub Actions and CI/CD pipelines. For regulated industries, containers simplify audits and compliance by enabling validation once and reuse everywhere. The result: faster onboarding, consistent builds, and stronger safety assurance. Containers aren’t a luxury—they’re the cheat code embedded teams need to modernize DevOps and compete effectively.


How to Achieve Deterministic Behavior in Real-Time Embedded Systems

Lance HarvieLance Harvie April 21, 20253 comments

Ensuring deterministic behavior in real-time embedded systems is paramount for their reliability and performance. The ability to predict precisely how a system will respond to various inputs at any given time is crucial in critical applications such as medical devices, aerospace systems, and automotive safety mechanisms. Achieving deterministic behavior involves meticulous design, stringent testing, and adherence to strict timing constraints.


Working with Microchip PIC 8-bit Interrupts

Luther StantonLuther Stanton March 30, 2025

This fifth and final post of the Getting Started with Microchip PIC 8 Bit Development series looks at interrupts on 8-bit PIC microcontrollers. After a review of basic interrupt functionality, an actual implementation is explored with the development of a four bit counter driven via Timer0 interrupts whose value is displayed through four LEDs on Microchip's Curiosity HPC Development Board.


Hidden Gems from the Embedded Online Conference Archives - Part 2

Tim GuiteTim Guite March 20, 20252 comments

A look back at a deep dive into the Mars Perseverance flight software from one of the technical leads at JPL.


Hidden Gems from the Embedded Online Conference Archives - Part 1

Tim GuiteTim Guite March 5, 2025

Discussion of a "hidden gem" from the Embedded Online Conference archives!


3 Tips for Developing Embedded Systems with AI

Jacob BeningoJacob Beningo March 1, 2025

Explore how to leverage AI in developing embedded systems with three practical tips, learn why documenting your workflows, supercharging testing and debugging, and adopting AI-assisted code generation can save time, reduce errors, and boost performance in your projects, and discover actionable insights to streamline development in resource-constrained environments, this blog explains how to prepare for AI integration while keeping the expertise of experienced engineers intact, offering real-world examples that show how even incremental AI adoption can revolutionize your development process, whether you’re new to AI or seeking to enhance existing practices, these strategies provide a clear roadmap to build smarter, more efficient embedded systems using AI.


Static or static

Colin WallsColin Walls February 24, 2025

The keyword static in C and C++ has multiple uses, which are not always well understood.


Introduction to Microcontrollers - Driving WS2812 RGB LEDs

Mike SilvaMike Silva November 14, 201330 comments

Mike Silva walks through a practical, cycle-counted AVR assembly implementation to bit-bang WS2812B RGB LEDs from an 8MHz AVR, hitting the chip's tight 1.25µs-per-bit timing. The post breaks down the WS2812B self-clocked protocol and GRB byte order, explains register and calling-convention choices, and includes a complete C example plus power-consumption warnings for driving LED strips.


Introduction to Microcontrollers - Interrupts

Mike SilvaMike Silva September 18, 20136 comments

Interrupts are not magic, they are the practical tool that lets a microcontroller respond in microseconds while still doing background work. This introduction explains what an interrupt and an ISR are, how return addresses and CPU state are saved, and why ISRs must be short and carefully written. AVR and STM32 external-interrupt examples show real configuration steps and key gotchas to watch for.


Boot Sequence for an ARM based embedded system

 DM DM January 16, 201231 comments

Deeksha draws on five years in embedded systems to introduce the ARM boot sequence used on Boot ROM based platforms. The post outlines what the Boot ROM does at reset, how it probes boot media, and when control is passed to a software bootloader. It also highlights key differences between NOR XiP and NAND RAM-loading and the need for bad-block handling.


Introduction to Microcontrollers - Hello World

Mike SilvaMike Silva September 11, 201316 comments

Mike Silva walks through the classic embedded hello world by blinking an LED on both an AVR and an STM32. The tutorial covers GPIO configuration, bit manipulation, simple software delay loops, and common pitfalls such as compiler optimizations that can remove empty delays unless you use volatile. Practical wiring tips and debugging advice with a scope make this an ideal first lab for embedded engineers.


Using the C language to program the am335x PRU

Fabien Le MentecFabien Le Mentec June 7, 201481 comments

Assembly-language PRU development is tedious and error prone, so Fabien Le Mentec shows how to use TI's PRU C toolchain to simplify the workflow. He walks through installing the CGT package, integrating the compiler with a modified prussdrv loader to honor the _c_int00 start symbol, and provides a BeagleBone Black example with build scripts and sources on GitHub. The post also covers inline assembly constraints and code-size tradeoffs.


C++ on microcontrollers 1 - introduction, and an output pin class

Wouter van OoijenWouter van Ooijen October 9, 20117 comments

Wouter van Ooijen shows how small C++ abstractions make GPIO code portable and reusable. Starting from a simple output_pin interface he implements concrete pins for an LPC2148 GPIO and a 74HC595 shift register, then composes behaviors with wrappers like tee and invert. The post demonstrates virtual methods, references, and constructor initialization lists to build drivers you can reuse across boards.


Endianness and Serial Communication

Stephen FriederichsStephen Friederichs May 20, 20131 comment

A single wrong byte order can cost you a day of debugging, and Stephen Friederichs walks through how to avoid that when sending multi-byte data over a byte-oriented serial link. He demonstrates an ATmega328P sending 16-bit ADC readings, capturing raw bytes with RealTerm, and plotting with Octave, showing how swapped endianness can produce plausible but incorrect results. The post gives practical steps to capture, test, and verify byte order.


How to Build a Fixed-Point PI Controller That Just Works: Part I

Jason SachsJason Sachs February 26, 20127 comments

Jason Sachs digs into the implementation choices that make a fixed-point PI controller reliable in real embedded systems. He focuses on practical fixes rather than tuning: prefer scale-then-integrate, fold the timestep into the integral gain, and apply anti-windup so saturations and sensor noise do not break the loop. Part I covers discrete-time pitfalls and sets up fixed-point scaling issues for Part II.


Important Programming Concepts (Even on Embedded Systems) Part V: State Machines

Jason SachsJason Sachs January 5, 20158 comments

State machines are not glamorous, but they solve a lot of real embedded problems. Jason Sachs uses a motorized couch example to show how FSMs and Harel statecharts expose corner cases, simplify timing constraints, and make behavior easier to specify and review. The article walks through hand-rolled switches, tabular implementations, the state pattern, libraries like QP and Boost, and tool tradeoffs.


Boot sequence for an ARM based embedded system -2

 DM DM April 6, 201213 comments

DM walks through the concrete steps of an ARM system startup, from the reset vector to handing control to C. The post explains what the early assembly reset code must do: set system registers, initialize stacks, set up the MMU, copy .data and clear .bss, and remap the vector table into RAM for faster interrupts. It finishes with external memory bring-up and loading an OS image.