What we've been reading in July and August

You may have noticed there was no July roundup. We’ve been busy improving Memfault, building out our partnerships with Nordic Semiconductor and Laird, and enjoying the summer months. Thanks for understanding.

Here are the articles, videos, and tools that we’ve been excited about this July and August.

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.

Articles & Learning

  • CMake Part 3 - Source File Organisation - Sticky Bits by Martin Bond
    A great introduction series to using CMake to cross-compile a firmware for an STM32F4 MCU. This post covers how to structure source files and build them into object and static files. Be sure to check out Part 1 and Part 2!
  • Rust on Espressif chips by Scott Mabin
    Scott recounts his experiences of working with ESP32 chips and Rust. There’s a ESP-IDF hello world Rust application that connects to Wi-Fi, has a GUI, and using many of the ESP-IDF standard library functions, all using Rust. I also learned about esp-rs, a project to help bring Rust to the Espressif ecosystem.
  • Exploring Clang/LLVM optimization on programming horror by Matthieu
    Matthieu dives into the deep end and investigates how LLVM (and GCC fails to) optimize a simple looping function into a constant time algorithm that is even shorter in assembly than in C(++).
  • Resolving I2C Address Conflicts by Phillip Johnston
    I2C address conflicts occur when two parts communicate over I2C using the same address. Phillip provides a simple and succinct list of options for how to work around them.
  • From Stolen Laptop to Inside the Company Network | Dolos Group
    The bit I learned from this article is that you can listen over SPI and capture a Bitlocker decryption key using the Saleae Logic analyzer, bitlocker-spi-toolkit. Fascinating.
  • The Monkey Island PC-Speaker music player by Athanasios Tsiodras
    Athanasios encoded all the songs from Monkey Island using Huffman compression, stored them on an ATtiny85, and played them over a tiny speaker. A nice mixture of C Arduino code and a bunch of Pythons scripting!
  • RISC-V: A Baremetal Introduction Using C++ by Phil Mulholland
    An 8 part series on Modern C++ RISC-V bare-metal programming.
  • WebSerial - Read from and write to a serial port by François Beaufort
    A series of code snippets explaining how to use the browser’s WebSerial API to read and write to and from a device’s serial port (think UART). I believe there is huge potential in interfacing with devices using WebUSB and WebSerial, especially around automated testing and debugging. Reach out if you’ve done anything you think is fun!
  • Reverse Engineering WiFi on RISC-V BL602 by Lee Lup Yuen
    The Bouffalo Labs BL602 comes pre-loaded with a closed-source Wi-Fi driver. In this novel of a post, Lee Lup Yuen reverse engineers the BL602 Wi-Fi driver to confirm it’s performing as expected. It turns out it contains a lot of open-source code which can be found in various projects, such as AliOS, the Rockchip RK3399 Wi-Fi driver, LWIP, mbedTLS, and FreeRTOS.
  • Semantic Versioning on Github | Stratify Labs
    A best-practices article on how to branch and version for firmware using Git. It describes cherry-picking, semantic versions, and changelogs.
  • What Every C Programmer Should Know About Undefined Behavior #1/3 | The LLVM Project Blog by Chris Lattner
    Chris goes over various ways to cause an LLVM-compiled program to crash and produce undefined behavior, such as integer overflow, dereferencing a null pointer, etc. I believe it’s good to know what not to do as well as what to do.
  • Embedded Cross-Compiled Test Driven Development with CGull | lack of focus by Lou Simons
    One of the annoying parts of embedded unit testing is that the libraries and frameworks usually don’t come with a “runner”. You have to craft your own using Make, CMake, or use Ceedling (but it’s Ruby, which I don’t love). Lou talks about how to test code using Unity and CGull as the runner.

Tools & Projects

Random

Tyler Hoffman has worked on the embedded software teams at Pebble and Fitbit. He is now a founder at Memfault.