EmbeddedRelated.com

Product quality: belief or proof?

Colin WallsColin Walls ● October 7, 2024

Embedded software development is a challenging activity, so it is essential to have tools and IP that is of the best quality. However, assessing that quality can be, in itself, a challenge.


Picowoose: The Raspberry Pi Pico-W meets Mongoose

Sergio R CaprileSergio R Caprile ● October 6, 2024

This example application describes the way to adapt the George Robotics CYW43 driver, present in the Pico-SDK, to work with Cesanta's Mongoose. We are then able to use Mongoose internal TCP/IP stack (with TLS 1.3), instead of lwIP (and MbedTLS).


Simulating Your Embedded Project on Your Computer (Part 1)

Nathan JonesNathan Jones ● October 2, 2024●2 comments

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.


How to use analog input (ADC) on NuttX RTOS

Alan C AssisAlan C Assis ● September 21, 2024

Hands-on walkthrough showing how to read analog voltages on a Raspberry Pi Pico running NuttX RTOS. The post explains RP2040 ADC basics, which GPIO channels and the internal temperature sensor are exposed, and how rp2040_adc_setup creates /dev/adc0. It also shows the menuconfig options, build and UF2 flash steps, a simple potentiometer test, and a note about RP2040 ADC spike artifacts.


Understanding Yocto Project Layers: A Modular Approach to Embedded Systems Development

Aaksha JaywantAaksha Jaywant ● September 16, 2024

Managing metadata across embedded Linux builds gets messy fast, so the Yocto Project uses layers to keep things modular and reusable. This post walks through inspecting active layers with bitbake-layers, controlling overrides with BBFILE_PRIORITY, and creating a meta-yocto-splash-img layer that uses a .bbappend to replace psplash. It finishes by showing how to verify the custom splash screen in QEMU so you can test safely before deploying to hardware.


My friend, the compiler

Ido GendelIdo Gendel ● September 11, 2024●4 comments

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

Nathan JonesNathan Jones ● September 4, 2024●2 comments

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?

Colin WallsColin Walls ● August 26, 2024●4 comments

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

Colin WallsColin Walls ● August 8, 2024

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

Nathan JonesNathan Jones ● August 1, 2024●1 comment

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.


R1C1R2C2: The Two-Pole Passive RC Filter

Jason SachsJason Sachs ● July 28, 2018●1 comment

Jason Sachs walks through the math and simulation for the common two-pole passive RC filter, turning repetitive algebra into a compact reference you can reuse. He derives the closed-form transfer function, extracts the natural frequency and damping ratio, and explains why the topology cannot be underdamped without inductors or active stages. The post finishes with a state-space simulation recipe and practical component guidance.


Introduction to Microcontrollers - More On GPIO

Mike SilvaMike Silva ● September 13, 2013●4 comments

Polarity matters: an output '1' does not always mean an LED lights, and inputs are just as picky. This post walks through LED driving basics, pull resistors for buttons, and practical bitwise techniques to read and write individual GPIO pins on AVR and STM32 boards. It also explains why polling rates and mechanical bounce make button handling trickier than it looks and what to watch for next.


Free Goodies from Embedded World - Full Inventory and Upcoming Draw Live-Streaming Date

Stephane BoucherStephane Boucher ● March 22, 2019●1 comment

Stephane came back from Embedded World with a massive haul of development kits, tools and swag and decided to give it away to multiple winners. Read the full inventory, learn how to enter by liking or sharing the LinkedIn and Twitter posts, and tune in Friday March 29 at 1pm EST on EmbeddedRelated.tv for the live draw where winners will pick their prizes.


Unit Tests for Embedded Code

Stephen FriederichsStephen Friederichs ● March 5, 2014●11 comments

Unit tests are one of the most effective ways to catch logic bugs early and protect embedded firmware against regressions. Stephen Friederichs explains why unit testing matters for microcontroller code, when to test, and the trade-offs between on-target and hosted approaches, with practical advice on stubbing, using the Check framework, simulators, and coverage tools to make testing realistic for embedded projects.


Finite State Machines (FSM) in Embedded Systems (Part 1) - There's a State in This Machine!

Massimiliano PaganiMassimiliano Pagani ● February 5, 2024●5 comments

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.


BGA and QFP at Home 1 - A Practical Guide.

Victor YurkovskyVictor Yurkovsky ● October 13, 2013●4 comments

It's a myth that BGAs and fine-pitch QFPs can't be soldered at home. Victor Yurkovsky lays out a practical, no-frills approach for hobbyists to design and assemble FPGA boards using 2-layer PCBs, breakout modules, and low-cost reflow methods like toaster ovens or hotplates. The article focuses on manufacturable PCB choices, netlist-driven workflows, and power/decoupling tactics that make high-density parts approachable for amateurs.


You Don't Need an RTOS (Part 1)

Nathan JonesNathan Jones ● April 11, 2024●13 comments

In this first article, we'll compare our two contenders, the superloop and the RTOS. We'll define a few terms that help us describe exactly what functions a scheduler does and why an RTOS can help make certain systems work that wouldn't with a superloop. By the end of this article, you'll be able to: - Measure or calculate the deadlines, periods, and worst-case execution times for each task in your system, - Determine, using either a response-time analysis or a utilization test, if that set of tasks is schedulable using either a superloop or an RTOS, and - Assign RTOS task priorities optimally.


Visual Studio Code Extensions for Embedded Software Development

Jacob BeningoJacob Beningo ● March 22, 2023●8 comments

Visual Studio Code can be a solid embedded development environment, if you equip it with the right extensions. Jacob Beningo walks through tools for Cortex-M debugging, register and RTOS inspection, build system support, formatting, linting, and vendor-specific workflows. It is a practical tour of the extensions that help VS Code feel much less like a general-purpose editor and more like an embedded IDE.


From Baremetal to RTOS: A review of scheduling techniques

Jacob BeningoJacob Beningo ● June 8, 2016●17 comments

Jacob Beningo walks through five common embedded scheduling techniques, showing how each scales from a single super loop to a full RTOS. He highlights practical trade-offs for round-robin, interrupt-driven, queued, cooperative, and RTOS approaches so you can spot when timing becomes fragile and when added complexity is justified. This primer sets up the next post on when to adopt an RTOS.


Use DPLL to Lock Digital Oscillator to 1PPS Signal

Michael MorrisMichael Morris ● July 24, 2016●8 comments

Michael Morris demonstrates a practical DPLL that locks a Direct Digital Synthesizer to a GPS 1PPS signal, achieving sub-microsecond alignment and removing reference-oscillator frequency error. The design uses a Phase-Frequency Detector for 0 degree phase lock, a multiplier-free α-filter, and a limiter to prevent saturation, and includes coast and re-lock logic plus a synthesizable Verilog reference core.