# Blog

**URL:** https://community.memfault.com/c/blog/5.md?page=2

[Latest](https://community.memfault.com/latest.md) · [Categories](https://community.memfault.com/categories.md)

**Page:** 3

---

## [OTA for Embedded Linux Devices: A practical introduction | Interrupt](https://community.memfault.com/t/ota-for-embedded-linux-devices-a-practical-introduction-interrupt/662)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 7\
**Last updated:** [October 5, 2023, 4:09pm UTC](https://community.memfault.com/t/ota-for-embedded-linux-devices-a-practical-introduction-interrupt/662 "2023-10-05T16:09:42Z")

</div>

A core belief of Memfault is that we can ship faster when we have good infrastructure in place. An essential piece of this infrastructure is tools to send firmware updates over the air. It enables the team to ship more o…

---

## [From zero to main(): Bare metal Rust | Interrupt](https://community.memfault.com/t/from-zero-to-main-bare-metal-rust-interrupt/114)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [September 5, 2023, 1:35am UTC](https://community.memfault.com/t/from-zero-to-main-bare-metal-rust-interrupt/114 "2023-09-05T01:35:54Z")

</div>

For the past thirty years or so, the choice of languages for embedded systems developers has been relatively slim. Languages like C++ and Ada have found a home in some niche areas, such as telecommunications and safety c…

---

## [Bazel Build System for Embedded Projects | Interrupt](https://community.memfault.com/t/bazel-build-system-for-embedded-projects-interrupt/675)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 2\
**Last updated:** [August 22, 2023, 4:45pm UTC](https://community.memfault.com/t/bazel-build-system-for-embedded-projects-interrupt/675 "2023-08-22T16:45:50Z")

</div>

Selecting a build system is an essential decision when creating a project. Changing is always painful, especially in a mature repository. Therefore the choice should be made carefully. With this article, I will try to de…

---

## [MCUboot Walkthrough and Porting Guide | Interrupt](https://community.memfault.com/t/mcuboot-walkthrough-and-porting-guide-interrupt/292)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 3\
**Last updated:** [August 4, 2023, 12:44pm UTC](https://community.memfault.com/t/mcuboot-walkthrough-and-porting-guide-interrupt/292 "2023-08-04T12:44:28Z")

</div>

In previous articles such as How to Write a Bootloader from Scratch, device firmware update strategies, & how to securely sign firmware updates, we have explored the various parts that make up a bootloader and DFU subsys…

---

## [Asynchronous Rust on Cortex-M Microcontrollers | Interrupt](https://community.memfault.com/t/asynchronous-rust-on-cortex-m-microcontrollers-interrupt/689)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 5\
**Last updated:** [July 27, 2023, 4:52pm UTC](https://community.memfault.com/t/asynchronous-rust-on-cortex-m-microcontrollers-interrupt/689 "2023-07-27T16:52:26Z")

</div>

In the realm of embedded software, the demand for efficient and responsive applications is ever-increasing. Asynchronous programming, with its ability to handle concurrent tasks effectively, holds immense potential in th…

---

## [From zero to main(): Bootstrapping libc with Newlib | Interrupt](https://community.memfault.com/t/from-zero-to-main-bootstrapping-libc-with-newlib-interrupt/105)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [June 28, 2023, 5:30pm UTC](https://community.memfault.com/t/from-zero-to-main-bootstrapping-libc-with-newlib-interrupt/105 "2023-06-28T17:30:34Z")

</div>

This is the third post in our zero to main() series, where we worked methodically to demystify what happens to firmware before the main() function is called. So far, we bootstrapped a C environment, wrote a linker script…

---

## [Nash’s Four Favorite Firmware Debug Tools | Interrupt](https://community.memfault.com/t/nash-s-four-favorite-firmware-debug-tools-interrupt/488)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 6\
**Last updated:** [June 7, 2023, 10:18pm UTC](https://community.memfault.com/t/nash-s-four-favorite-firmware-debug-tools-interrupt/488 "2023-06-07T22:18:42Z")

</div>

As much as I enjoy writing firmware, I am, at heart, a hardware engineer. I love hunting for minutia in chip datasheets. I love fiddling with eval boards, tacking on wires, and reworking nets together. I love flipping th…

---

## [Introduction to ARM Semihosting | Interrupt](https://community.memfault.com/t/introduction-to-arm-semihosting-interrupt/353)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 6\
**Last updated:** [May 23, 2023, 6:23pm UTC](https://community.memfault.com/t/introduction-to-arm-semihosting-interrupt/353 "2023-05-23T18:23:39Z")

</div>

Firmware developers are generally accustomed to using logging for execution information. On microcontrollers, this is usually done through a serial interface attached to a terminal on the host. This is a companion disc…

---

## [Pocket article: Debug vs. Release Builds Considered Harmful | Interrupt](https://community.memfault.com/t/pocket-article-debug-vs-release-builds-considered-harmful-interrupt/653)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 4\
**Last updated:** [May 15, 2023, 11:10am UTC](https://community.memfault.com/t/pocket-article-debug-vs-release-builds-considered-harmful-interrupt/653 "2023-05-15T11:10:00Z")

</div>

Separate “debug” and “release” builds are very common in embedded development. Typically the notion is improved debug capabilities (less aggressive compiler optimizations, more debugging information like logs) vs. highly…

---

## [Embedded C/C++ Unit Testing Basics | Interrupt](https://community.memfault.com/t/embedded-c-c-unit-testing-basics-interrupt/84)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 23\
**Last updated:** [April 21, 2023, 7:47pm UTC](https://community.memfault.com/t/embedded-c-c-unit-testing-basics-interrupt/84 "2023-04-21T19:47:17Z")

</div>

Complex embedded projects have thousands and frequently tens of thousands lines of code. The majority of that code is entirely software (rather than “firmware”), and software in every industry is typically unit tested. H…

---

## [Faster debugging with watchpoints | Interrupt](https://community.memfault.com/t/faster-debugging-with-watchpoints-interrupt/265)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 3\
**Last updated:** [April 20, 2023, 9:39am UTC](https://community.memfault.com/t/faster-debugging-with-watchpoints-interrupt/265 "2023-04-20T09:39:14Z")

</div>

One of the most challenging types of issues to debug is memory corruption! Memory corruption can be caused for a variety of reasons including when data is used after it has been freed, a read or write goes past the end o…

---

## [Rust for Low Power Digital Signal Processing | Interrupt](https://community.memfault.com/t/rust-for-low-power-digital-signal-processing-interrupt/137)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 8\
**Last updated:** [April 13, 2023, 1:46am UTC](https://community.memfault.com/t/rust-for-low-power-digital-signal-processing-interrupt/137 "2023-04-13T01:46:30Z")

</div>

Like many firmware developers, I’ve been curious about the potential Rust can have in the embedded space. After reading James Munns’ great article, I decided to find a project I could use Rust for to learn. This is a c…

---

## [Integrating Memfualt into an Embedded Linux Project | Interrupt](https://community.memfault.com/t/integrating-memfualt-into-an-embedded-linux-project-interrupt/627)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [March 11, 2023, 4:07pm UTC](https://community.memfault.com/t/integrating-memfualt-into-an-embedded-linux-project-interrupt/627 "2023-03-11T16:07:03Z")

</div>

IoT devices have become ubiquitous. Given the number of new devices being deployed all over the world and far from the desks of developers, it is imperative to have a solid set of tools to manage them without being direc…

---

## [Building a Tiny CLI Shell for Tiny Firmware | Interrupt](https://community.memfault.com/t/building-a-tiny-cli-shell-for-tiny-firmware-interrupt/215)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 13\
**Last updated:** [January 27, 2023, 7:45pm UTC](https://community.memfault.com/t/building-a-tiny-cli-shell-for-tiny-firmware-interrupt/215 "2023-01-27T19:45:21Z")

</div>

The most common and simplest interface to a computer and operating system is a command-line shell. It allows for quick operations, the ability to automate operations through scripting, and is light on bandwidth usage. T…

---

## [Fix Bugs and Secure Firmware with the MPU | Interrupt](https://community.memfault.com/t/fix-bugs-and-secure-firmware-with-the-mpu-interrupt/60)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 4\
**Last updated:** [November 23, 2022, 5:48pm UTC](https://community.memfault.com/t/fix-bugs-and-secure-firmware-with-the-mpu-interrupt/60 "2022-11-23T17:48:39Z")

</div>

On a computer when when an application dereferences a NULL pointer or tries to access kernel memory we can catch it pretty easily thanks to the features provided by the MMU on the chip. This is a companion discussion t…

---

## [What we’ve been reading in October | Interrupt](https://community.memfault.com/t/what-we-ve-been-reading-in-october-interrupt/608)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [November 11, 2022, 12:57am UTC](https://community.memfault.com/t/what-we-ve-been-reading-in-october-interrupt/608 "2022-11-11T00:57:50Z")

</div>

Here are the articles, videos, and tools that we’ve been excited about this October We hope you enjoy these links, and we look forward to hearing what you’ve been reading in the comments or on the Interrupt Slack. This…

---

## [Improving Compilation Time of C/C++ Projects | Interrupt](https://community.memfault.com/t/improving-compilation-time-of-c-c-projects-interrupt/141)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 7\
**Last updated:** [October 27, 2022, 12:52am UTC](https://community.memfault.com/t/improving-compilation-time-of-c-c-projects-interrupt/141 "2022-10-27T00:52:04Z")

</div>

We’ve all likely worked on a software or firmware project where the build takes a “coffee break” amount of time to complete. It’s become such a common occurrence that there is an infamous xkcd comic related to the matter…

---

## [GNU Build IDs for Firmware](https://community.memfault.com/t/gnu-build-ids-for-firmware/44)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 11\
**Last updated:** [October 18, 2022, 2:20pm UTC](https://community.memfault.com/t/gnu-build-ids-for-firmware/44 "2022-10-18T14:20:00Z")

</div>

In this post, we demonstrate how to use the GNU Build ID to uniquely identify a build. We explain what the GNU build ID is, how it is enabled, and how it is used in a firmware context. This is a companion discussion t…

---

## [What we’ve been reading in September | Interrupt](https://community.memfault.com/t/what-we-ve-been-reading-in-september-interrupt/603)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [October 17, 2022, 8:28am UTC](https://community.memfault.com/t/what-we-ve-been-reading-in-september-interrupt/603 "2022-10-17T08:28:12Z")

</div>

Here are the articles, videos, and tools that we’ve been excited about this September We hope you enjoy these links, and we look forward to hearing what you’ve been reading in the comments or on the Interrupt Slack. Th…

---

## [How to debug a HardFault on an ARM Cortex-M MCU | Interrupt](https://community.memfault.com/t/how-to-debug-a-hardfault-on-an-arm-cortex-m-mcu-interrupt/106)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 20\
**Last updated:** [October 14, 2022, 4:21pm UTC](https://community.memfault.com/t/how-to-debug-a-hardfault-on-an-arm-cortex-m-mcu-interrupt/106 "2022-10-14T16:21:50Z")

</div>

Faults happen on embedded devices all the time for a variety of reasons – ranging from something as simple as a NULL pointer dereference to something more unexpected like running a faulty code path only when in a zero-g …

---

## [Embedded C/C++ Unit Testing with Mocks | Interrupt](https://community.memfault.com/t/embedded-c-c-unit-testing-with-mocks-interrupt/193)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 3\
**Last updated:** [August 15, 2022, 2:14pm UTC](https://community.memfault.com/t/embedded-c-c-unit-testing-with-mocks-interrupt/193 "2022-08-15T14:14:49Z")

</div>

Writing a unit test from scratch for an embedded software project is almost always an exercise in frustration, patience, and determination. This is because of the constraints, as well as breadth, of embedded software. It…

---

## [Automatically format and lint code with pre-commit | Interrupt](https://community.memfault.com/t/automatically-format-and-lint-code-with-pre-commit-interrupt/457)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 12\
**Last updated:** [June 29, 2022, 4:08am UTC](https://community.memfault.com/t/automatically-format-and-lint-code-with-pre-commit-interrupt/457 "2022-06-29T04:08:15Z")

</div>

I love clean and tidy codebases. I love them even more if I don’t have to manually spend hours doing it myself. The problem is not everyone shares the same love and passion for tidy codebases, especially when we’re press…

---

## [Pocket article: How to implement and use .noinit RAM | Interrupt](https://community.memfault.com/t/pocket-article-how-to-implement-and-use-noinit-ram-interrupt/472)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 2\
**Last updated:** [April 21, 2022, 6:04pm UTC](https://community.memfault.com/t/pocket-article-how-to-implement-and-use-noinit-ram-interrupt/472 "2022-04-21T18:04:22Z")

</div>

Imagine there’s an embedded system that needs to persist some state when the processor restarts (either intentionally or due to a catastrophic error). This is a companion discussion topic for the original entry at http…

---

## [C Structure Padding Initialization | Interrupt](https://community.memfault.com/t/c-structure-padding-initialization-interrupt/532)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 3\
**Last updated:** [March 11, 2022, 5:13pm UTC](https://community.memfault.com/t/c-structure-padding-initialization-interrupt/532 "2022-03-11T17:13:25Z")

</div>

This article takes a look at a few different aspects of C structure initialization. In particular, we’ll look at when it matters, the current state of things in Clang and GCC, recommendations, and the ✨ future ✨. This …

---

## [I2C in a Nutshell | Interrupt](https://community.memfault.com/t/i2c-in-a-nutshell-interrupt/126)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 12\
**Last updated:** [February 16, 2022, 1:17am UTC](https://community.memfault.com/t/i2c-in-a-nutshell-interrupt/126 "2022-02-16T01:17:31Z")

</div>

I2C is perhaps the most commonly used bus to connect ICs together. As such, firmware engineers encounter it on most project. In this post, we explain how I2C works, explore common bugs and investigate how to debug these …

---

## [Peeking inside CMSIS-Packs | Interrupt](https://community.memfault.com/t/peeking-inside-cmsis-packs-interrupt/449)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 2\
**Last updated:** [November 11, 2021, 12:55am UTC](https://community.memfault.com/t/peeking-inside-cmsis-packs-interrupt/449 "2021-11-11T00:55:15Z")

</div>

CMSIS-Packs are a package format defined by ARM for vendors to provide various software artifacts that simplify dealing with target devices. This is a companion discussion topic for the original entry at https://interr…

---

## [New Events and Jobs Pages on Interrupt | Interrupt](https://community.memfault.com/t/new-events-and-jobs-pages-on-interrupt-interrupt/465)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [November 10, 2021, 6:03pm UTC](https://community.memfault.com/t/new-events-and-jobs-pages-on-interrupt-interrupt/465 "2021-11-10T18:03:07Z")

</div>

François, Chris, and I started Interrupt 2.5 years ago because we wanted a repository of great embedded firmware content, which didn’t exist. Looking back at all the posts that our community contributors have published, …

---

## [What we’ve been reading in September | Interrupt](https://community.memfault.com/t/what-we-ve-been-reading-in-september-interrupt/451)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 1\
**Last updated:** [October 14, 2021, 11:13pm UTC](https://community.memfault.com/t/what-we-ve-been-reading-in-september-interrupt/451 "2021-10-14T23:13:52Z")

</div>

Here are the articles, videos, and tools that we’ve been excited about this September. We hope you enjoy these links, and we look forward to hearing what you’ve been reading in the comments or on the Interrupt Slack. T…

---

## [Firmware Static Analysis with CodeChecker | Interrupt](https://community.memfault.com/t/firmware-static-analysis-with-codechecker-interrupt/410)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 7\
**Last updated:** [September 2, 2021, 8:28am UTC](https://community.memfault.com/t/firmware-static-analysis-with-codechecker-interrupt/410 "2021-09-02T08:28:01Z")

</div>

The pitfalls of C programming are well known: undefined behavior abounds, uninitialized variables lie in wait, memory leaks, and buffers overflow. This is a companion discussion topic for the original entry at https://…

---

## [Building a CLI for Firmware Projects using Invoke | Interrupt](https://community.memfault.com/t/building-a-cli-for-firmware-projects-using-invoke-interrupt/74)

<div class="topic-metadata">

**Author:** [@discobot](https://community.memfault.com/u/discobot)\
**Replies:** 8\
**Last updated:** [August 16, 2021, 7:29pm UTC](https://community.memfault.com/t/building-a-cli-for-firmware-projects-using-invoke-interrupt/74 "2021-08-16T19:29:32Z")

</div>

Building a small (or large) command line interface (CLI) for a project is a great way to get an entire team to build, test, debug, and work with a project in the same way using the same set of tools. This post goes into …

[Previous page](https://community.memfault.com/c/blog/5.md?page=1)

[Next page](https://community.memfault.com/c/blog/5.md?page=3)
