What we've been reading in April (2022)
Here are the articles, videos, and tools that we’ve been excited about this April
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
Memfault & Embedded Artistry Virtual Panel: Building Embedded Systems at Scale with Device Metrics with Tyler Hoffman, Phillip Johnston, and Shiva Rajagopal
I had a blast chatting with Shiva and Phillip about capturing and collecting device metrics in production to track down hard-to-reproduce bugs and understanding how firmware can degrade over time if the metrics aren’t monitored.
Memfault Webinar: Launching an IoT Device: A Blueprint for Success with François Baldassari
François will talk about how to launch a connected device quickly and without fear using some approaches he’s learned along the way, such as Day-0 firmware updates, device monitoring, and staged rollouts of firmware updates.
How to Write a Spelling Corrector (Python) by Peter Norvig
Description of a simple and elegant spell correction algorithm, implemented in 27 lines of Python. - Noah
How to take away its firmware from the QN902x microcontroller - Sudo Null IT News by aleaksah
Interesting reverse engineering writeup of a Xiaomi smart kettle (original in Russian, translated).
koniarik/teaching-embedded-remotely by koniarik
A thoroughly documented setup for running a remote embedded engineering course with shared hardware stations. I especially appreciated the use of Ansible! - Noah
Exploring Xiaomi’s new firmware security measures – RoboCoffee
Analyzing a signed firmware update for Xiaomi electric scooters - Noah
Buttons on BL602/Nuttx - Robert Lipe on Technology by Robert Lipe
An article detailing an attack attempt on a Buffalo BL606 NuttX-based chipset. - Tyler
Patching an Embedded OS from 1996 with Ghidra by Peter Sobot
A tale of reverse engineering firmware with Ghidra to patch new behavior into it.
Learning Resources · crossbeam-rs/rfcs Wiki
A very nice collection of information on concurrency topics - Noah
Initializing Variables in Embedded C++ - Stratify Labs
This article covers pretty much all the possible ways to initialize variables in C++. Who knew there were so many?
4 integers are enough to write a Snake Game by Andrei Ciobanu
A fun article showing how to write a game of Snake in C using only a minimal amount of state.
Bisecting a Linux Kernel boot failure due to changed compiler flags by Nathan Chancellor
A fantastic use of Git Bisect to help find a bug committed into the Linux Kernel
Tools & Libraries
Frida - A world-class dynamic instrumentation framework
This is insanely cool- hook some python/js scripting into a running process for debugging, reverse engineering, black box testing, etc. - Noah. From their website, they compare it to GreaseMonkey for native applications. Amazing!
Coding Up an IoT PCB Design by Dylan Jackson
Using code to help generate the PCD designs of hardware using JITX and exporting to an Altium project.
JITX - Software defined electronics
As mentioned above in an article, JITX seems like a great way to codify the error-prone PCB design phase.
Compiler Explorer API Documentation
Compiler Explorer is one of my favorite tools for testing+sharing small snippets. TIL it supports a LOT of languages, including Python (if you’re ever interested in looking at Python bytecode!), as well as provides a compilation-as-a-service (CAAS?) API. One thing it really excels at is testing snippets against a variety of compiler versions (e.g. Clang v10 vs GCC v9, etc), for example, if you’ve found some anomalous behavior on a particular compiler version and want to quickly check if it’s changed in a later version. - Noah
picolibc/picolibc: picolibc - a C library designed for embedded 32- and 64- bit systems
We’ve posted about picolibc many times, but I just realized that this is going to be integrated into Zephyr soon!
espressif/esp-usb-bridge: USB to UART & JTAG bridge, implemented on ESP32-S2 or ESP32-S3
Turn an ESP32 into a USB->UART/JTAG bridge - Noah
Unit Testing with QP/C++ (qpcpp) and CppUTest by Matthew Eshleman
Matthew recently released a package which helps get CppUTest & QP/C++ projects up and running with host-based unit testing.
Q&A: What Happened to the Embedded Artistry blog? by Phillip Johnston
Even though the blog might seem quiet, the Embedded Artistry community is alive and well.
Make self hosted compiler capable of building itself by Vexu · GitHub Pull Request #11442 · ziglang/zig
Zig compiler now self-hosts! - Noah. This means that Zig can now compile itself, which it could not do before.
The state of static analysis in the GCC 12 compiler - Red Hat Developer
Interested to see more static analysis make its way into GCC, for free! - François
IEEE 802.11ah - Wikipedia
TIL there’s a WiFi flavor that uses sub-GHz for long range/low-power/low data rate - Noah
BeanCounter - Crowd Supply
Very slick little device for dealing with tape and reel components. Open source! - Noah
USB Cheat Sheet by Fabien Sanglard
A page that covers all the specs and pins up all USB specs.