Writing Firmware without Hardware (featuring Matt Chernosky)

The Pragmatic Embedded Podcast · 16 Nov 2021 · 36m

What this episode covers

Matt Chernosky, author of 'A Field Manual for Ceedling', explains how to write and test embedded C firmware on a host PC using Ceedling, Unity, and CMock to enable rapid Test-Driven Development (TDD). He argues that removing hardware dependencies allows for instant feedback loops, better architecture through hardware abstraction layers, and easier continuous integration. The discussion covers strategies for introducing TDD to legacy codebases, the role of automated unit tests in medical device compliance, and the importance of testing high-risk, changing code rather than aiming for 100% coverage.

Mentioned

Chips
STM32, Tiva C
Tools
Ceedling, Unity, CMock, GCC, GitHub Actions
Also
James Grenning, Michael Feathers

Other shows on the same ground, closest first.

  • Embedded.fm · 1h 09m

    103: Tentacles Of the Kraken

    Mark VanderVoord, lead maintainer of the open source testing frameworks Unity and CMock, explains how test-driven development (TDD) and mocking help embedded engineers design better code without needing full hardware simulators. He details the workflow of using CMock to generate fake interfaces for hardware drivers like I2C, allowing developers to test logic in a native host environment. VanderVoord also discusses the challenges of maintaining these tools, his new online course on ThrowTheSwitch.org, and the business model of supporting free open source projects through books and classes.

  • Embedded.fm · 57m

    30: Eventually Lightning Strikes (Repeat)

    James Grenning, author of 'Test-Driven Development for Embedded C' and founder of Renaissance Software, explains how Test-Driven Development (TDD) improves embedded software engineering by enabling developers to write portable, modular code before hardware is available. He argues that TDD forces early design decisions, such as modularity and interface segregation, which reduces integration bugs and allows engineers to test logic on a PC rather than waiting for target hardware. Grenning also discusses his teaching methodology, emphasizing that engineers should experience TDD themselves to understand its value in reducing late-stage debugging and managing legacy code.

  • Embedded.fm · 56m

    30: Eventually Lightning Strikes

    James Grenning, author of 'Test Driven Development for Embedded C' and founder of Renaissance Software, explains how TDD reduces bugs and improves design in embedded systems. He argues that manual testing is unsustainable because the cost of retesting grows exponentially, leading to hidden defects that cause late-stage failures. Grenning advocates for getting code off the target hardware to run on PCs using mocks and fakes, which forces modularity and allows engineers to build confidence before hardware is available. He emphasizes that TDD is not just about testing but about driving SOLID design principles, such as single responsibility, by making complex code difficult to test.

  • Embedded.fm · 1h 10m

    270: Broccoli Is Good Too

    James Grenning, author of 'Test Driven Development for Embedded C' and founder of Wingman Software, discusses the philosophy and practice of Test Driven Development (TDD) for embedded systems. He explains how TDD reduces debugging time by enforcing small, verifiable steps and using techniques like 'ZOMBIES' to defer complex decisions. Grenning also shares insights from a recent side project involving a Synapse Wireless mesh network for industrial water pressure monitoring, illustrating how to handle hardware uncertainty through experimentation and loose coupling.

  • Embedded.fm · 1h 19m

    211: 4 weeks, 3 days

    Dennis Jackson, Director of Firmware at Element Science, discusses how software engineers can transition into embedded systems by building personal projects using low-cost hardware like STM32 Discovery boards. He advises new hires to read James Grenning’s Test Driven Development in Embedded C and Elecia White’s Making Embedded Systems, emphasizing that understanding build systems like Make and continuous integration is as critical as writing drivers. Jackson argues that the distinction between firmware and software is fading, urging engineers to apply general software best practices like unit testing and static analysis to embedded constraints. He shares his interview philosophy, which prioritizes problem-solving and code quality over syntax, and highlights the importance of establishing a reproducible build environment to ensure reliable production releases.

The summary, chapters and topics are generated from the episode’s audio by this directory, not written by The Pragmatic Embedded Podcast. The episode itself belongs to its publisher.