EmbeddedRelated.com

Boot Sequence for an ARM based embedded system

 DM DM ● January 16, 2012●31 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.


Analog-to-Digital Confusion: Pitfalls of Driving an ADC

Jason SachsJason Sachs ● November 19, 2011●8 comments

Wayne's thermistor board showed one ADC channel changing when another was heated, a classic case of ADC input cross-coupling. The post walks through how multiplexed ADCs, the small sample-and-hold capacitor, source impedance, sampling time, repeated sampling rates, and added charge reservoirs interact to create errors. Learn practical fixes including increasing sample time, sizing external caps, adding op-amp buffers, and using an RC dampener with PCB layout tips.


C++ on microcontrollers 4 – input pins, and decoding a rotary switch

Wouter van OoijenWouter van Ooijen ● November 12, 2011●2 comments

Wouter van Ooijen shows how to extend a small C++ I/O library for microcontrollers to support input pins and mixed I/O, and how to decode a rotary switch reliably. The post walks through a safe class hierarchy for input, output, and bidirectional pins, then builds a quadrature decoder with a saturating counter and an HC595 seven-segment demo you can run on LPCXpresso hardware.


C++ on microcontrollers 3 – a first shot at an hc595 class with 8 output pins

Wouter van OoijenWouter van Ooijen ● November 2, 2011

A simple HC595 wrapper turns into a nice C++ lesson in how to build reusable I/O abstractions for microcontrollers. Wouter van Ooijen shows how to expose all eight shift-register outputs as regular output pin objects, then generalizes the same pattern to MCU ports and even daisy-chained HC595 chips. Along the way, he runs into a classic class dependency problem and resolves it with forward declarations and out-of-class method definitions.


C++ on microcontrollers 2 - LPCXpresso, LPC-link, Code Sourcery, lpc21isp, linkerscript, LPC1114 startup

Wouter van OoijenWouter van Ooijen ● October 24, 2011●5 comments

Wouter van Ooijen walks you through getting C++ to run on a tiny LPC1114 board using LPCXpresso hardware and a command-line toolchain. He demonstrates a minimal linker script and startup code that initialize .data and .bss and call C++ global constructors, shows how to flash via the on-chip bootloader with lpc21isp when LPC-link is locked, and includes practical GPIO and SysTick LED examples.


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

Wouter van OoijenWouter van Ooijen ● October 9, 2011●7 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.


Kind of Buggy! The state machine fantastic//

Richard DorfnerRichard Dorfner ● August 31, 2011●2 comments

Richard Dorfner shows a compact way to debug an intermittent homing failure in a Pan/Tilt camera by logging the last 30 state transitions in a circular buffer. He tags each entry with a function identifier and uses breakpoints to walk the recorded sequence backwards. That reveals a timing interaction between a 100 ms periodic flag and the homing code that stopped the motor state machine. The method is low-overhead and ideal for single-threaded embedded systems.


Get your microcontroller and PC to talk

Jayaraman Kiruthi VasanJayaraman Kiruthi Vasan ● August 15, 2011●5 comments

Projects often need a quick PC interface for an otherwise standalone microcontroller, but learning VB or Visual C++ can feel like overkill. Jayaraman Kiruthi Vasan shows how Processing, an open source, C like environment with serial and Arduino libraries, gives embedded engineers a fast, low friction way to build GUIs and COM links to chips like the 8051 and Renesas R8C. The post promises a hands on example connecting Processing to a 8051.


Deeply embedded design example - Logic replacement

Gene BrenimanGene Breniman ● July 9, 2011

Gene Breniman shows how a tiny PIC10F200 can replace a forest of discrete timing components to control six 10A H-bridges, letting firmware tune sequencing to cut EMI and reduce cost. He walks through analyzing the original RC/inverter delays, choosing the PIC, pinout and timer setup, and implementing compact assembly firmware that reproduces and improves the timing behavior. The result is fewer parts, saved board space, and better EMI control.


Real-time clocks: Does anybody really know what time it is?

Jason SachsJason Sachs ● May 29, 2011●8 comments

Most RTC chips still expose calendar fields rather than seconds-since-epoch, forcing embedded engineers to write ugly conversion code. Jason Sachs makes the case for offset encoding, subseconds, and an explicit snapshot feature to simplify interval math, raise precision, and avoid rare timing bugs. Read this practical take on RTC trade-offs and a short wishlist for chip makers.


Make Your Own MCU Boards (2023 Teardown Conference)

Nathan JonesNathan Jones ● March 7, 2024

Ditch the development boards! Products like the Nucleo development boards serve a wonderful purpose, but they’re ill-suited for projects that need to be small and cheap, such as hobby projects or products just beginning a production run. In this talk (a recording from the 2023 Teardown Conference), you’ll learn how to put a microcontroller or other custom circuit on a PCB a little larger than a stick of gum for less than $3 a board.


Video-Based STEM Embedded Systems Curriculum, Part 2

Steve BranamSteve Branam ● October 25, 2021

Part 2 delivers three ready-to-run lesson plans for a video-based STEM embedded course, starting with Arduino hands-on projects using an Elegoo UNO starter kit and Bryan Vines video walkthroughs that explain the code. It then teaches Fritzing for pictorial and schematic circuit drawings, followed by Collin Cunningham videos that cover resistors, capacitors, transistors, schematics, and other core components. The sequence stresses design, draw, build, test to keep students engaged.


Getting Started With CUDA C on an Nvidia Jetson: A Meaningful Algorithm

Mohammed BillooMohammed Billoo ● May 11, 2024

In this blog post, I demonstrate a use case and corresponding GPU implementation where meaningful performance gains are realized and observed. Specifically, I implement a "blurring" algorithm on a large 1000x1000 pixel image. I show that the GPU-based implementation is 1000x faster than the CPU-based implementation.


Handling latency in data acquisition systems

Fabien Le MentecFabien Le Mentec ● November 8, 2015

In recent projects, I found myself working with data acquisition systems. For instance: PCIe/10GbE readouts for 2D XRay detectors (RASHPA slides, RASHPA paper) instruments mixing 1D signal acquisition and triggering, microcontroller based system for audio transmission: (NRF spearker)


Lightweight hardware abstraction

Gene BrenimanGene Breniman ● January 31, 2012

Hardware pin reassignments turned a small firmware tweak into a tangled mess of #ifdefs and scattered port references. Gene Breniman shows how a lightweight hardware abstraction, implemented with per-board include headers and meaningful macros like MODE_LED and LED_ON, cleans up the code and makes it easy to target multiple prototypes. The post emphasizes keeping changes local to configuration headers to reduce validation scope and maintenance.


Getting Started With CUDA C on an Nvidia Jetson: GPU Architecture

Mohammed BillooMohammed Billoo ● March 28, 2024

In the previous blog post (Getting Started With CUDA C on Jetson Nvidia: Hello CUDA World!) I showed how to develop applications targeted at a GPU on a Nvidia Jetson Nano. As we observed in that blog post, performing a calculation on a 1-D array on a GPU had no performance benefit compared to a traditional CPU implementation, even on an array with many elements. In this blog post, we will learn about the GPU architecture to better explain the behavior and to understand the applications where a GPU shines (hint: it has to do with graphics).


GNU Linker Scripts. Part 1. .data, .bss, and the Startup Contract

Alexey KarelinAlexey Karelin ● May 5, 2026

Before your first line of C code executes, your system must establish a vital memory contract. Discover how the GNU Linker manages the transition from power-on to a ready-to-run state by deconstructing the roles of .data and .bss sections. Learn how to map Virtual and Load Memory Addresses effectively and decode the startup routines that initialize your global variables. By mastering these fundamental linker script mechanics, you gain total control over your embedded application's memory layout and ensure your startup code performs reliably every time.


Kind of Buggy! The state machine fantastic//

Richard DorfnerRichard Dorfner ● August 31, 2011●2 comments

Richard Dorfner shows a compact way to debug an intermittent homing failure in a Pan/Tilt camera by logging the last 30 state transitions in a circular buffer. He tags each entry with a function identifier and uses breakpoints to walk the recorded sequence backwards. That reveals a timing interaction between a 100 ms periodic flag and the homing code that stopped the motor state machine. The method is low-overhead and ideal for single-threaded embedded systems.


Tracing code and checking timings

Richard DorfnerRichard Dorfner ● May 25, 2011●5 comments

When you cannot afford logs or to stop the CPU, GPIO toggles become a powerful real-time tracer. Richard shows how driving IO pins and watching them with an oscilloscope or logic analyzer reveals control flow, function timings, and ISR activity with very little overhead. He also explains using direct port writes and conditional compilation to keep measurements noninvasive and easy to enable or disable.


My first entry to embeddedrelated.com

Pragnesh PatelPragnesh Patel ● October 23, 2007●2 comments

Pragnesh Patel introduces his first EmbeddedRelated post with a hands-on look at embedded systems work on FPGA platforms. He describes using Xilinx Spartan-3E and EDK 9.1, and explains why FPGA logic can offload processor tasks in R&D and complex products. The post sets up a future series on implementing embedded systems with Xilinx devices.