What we've been reading in November (2021)
Here are the articles, videos, and tools that we’ve been excited about this November.
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
How to monitor, debug & update your Embedded Android devices Webinar by Ryan Case
Memfault put on a webinar last month covering all the tools and infrastructure you’ll likely need to monitor, debug, and update embedded Android devices in the field. If you’re working in the Android ecosystem, it’s definitely worth the watch.
5 Reasons Why I Dread Writing Embedded GUIs - Benjamin Cabé by Benjamin Cabé
Writing GUI’s in firmware is usually painful, and Benjamin agrees. I had to write a few user interfaces in the Pebble firmware during the 3.0 rewrite, and although it was fun and rewarding, it took way longer than it should have due to the lack of tooling as mentioned in the article.
Want your mind truly blown? Go watch Heiko Behrens present his “demo” at Evoke 2017 on an OG Pebble.
Porting Doom to an nRF52840-based USB Bluetooth-LE Dongle – next-hack.com
Continuing the graphics theme, this novel-post details the efforts taken to get Doom to run on a USB dongle based on a Nordic nRF52840. If you have a spare hour, read this.
Hi, I’m working on GDBFrontend debugger, what features would you like to see? - Reddit /r/embedded
A GDBFrontend developer was asking the /r/embedded community for feature request. Some good comments in here.
Ask HN: What are some great engineering blogs? - Hacker News
Looking for a new engineering blog to follow? It’s probably listed in here. Interrupt made it into the top comment! ❤️
Learning Computer Architecture Through a Game - Embedded Artistry by Phillip Johnston
Phillips talks about Turing Complete, a game on Steam, which teaches from literally zero about computer science and how computers work on a fundamental level.
Using Singletons in Embedded C++ - Stratify Labs by Stratify Labs
A post on how to use Singletons to wrap and use hardware peripherals in C++.
Ada on any ARM Cortex-M device, in just a couple… - The AdaCore Blog by Fabien Chouteau
If you’ve been itching to run Ada on your devices, it sounds like now is a good time. They are working diligently on getting it to run on Cortex-M devices, as evidenced by this blog post and another one - An Embedded USB Device stack in Ada
Up and Running with ZephyrRTOS on Conexio Stratus IoT Kit - Hackster.io
A getting started post using Conexio and ZephyrRTOS. I don’t have personal experience with Conexio, but they are working on integrating Memfault into their platform, which is a good sign in my book.
A survey of concurrency bugs - Cove Mountain Software by Matthew Eshleman
A post on common embedded software concurrency bugs and their mitigations.
Real Time For the Masses goes multi-core - Embedded in Rust by Jorge Aparicio
RTFM, or Real Time For the Masses, which is a concurrency library for Rust tailed for embedded devices, has been updated to support Cortex-M multi-core chips. This post covers the new API and details how you can get started.
GPIO handling in ARM Cortex-M - Sergio R. Caprile by Sergio R. Caprile
What actually happens when you set a GPIO port.
Reducing an LTO Linux kernel bug with cvise - Nathan Chancellor by Nathan Chancellor
Such a fun post. There’s an art to reporting bugs, and that usually involves coming up with the absolute minimal reproducible issue that the maintainer can replay on their own machine. This is what Nathan did with a compiler bug related to LTO. During this post, I learned about C-Reduce.
A Close Look at a Spinlock – Embedded in Academia by John Regehr
A short and sweet post about spinlocks, a concurrency primitive.
I2C Communication Protocol: Understanding I2C Primer PMBus and SMBus - Analog Devices by Mary Grace Legaspi and Eric Peňa
A wonderful overview of I2C, maybe the best I’ve found online.
Learning Rust For Embedded Systems - EmbeddedRelated.com by Steve Branam
Steve was told to go evaluate Rust for an embedded project and here tells about his journey. The post contains a wealth of resources and links to various books, pages, and posts about Embedded Rust. His answer is, use Rust!
On Hubris and Humility: developing an OS for robustness in Rust - Open Source Firmware Conference 2021
The team at Oxide Computer gave a talk on their new embedded RTOS written in Rust, Hubris, and debugging setup, Humility. This is all incredibly exciting and I can’t wait to see how it progresses.
2021 IoT Online Conference
The 2021 edition of the IoT Online Conference kicks off on December 8th.
NoHat 21 - LimitedResults
LimitedResults, known for exploiting the nRF52 and ESP32 series of chips, is at it again, this time with Silicon Labs EFM32 Gecko chips. He details the exploit which enables the reactivation of the ARM SWD debug port after being explicitly and “permanently” disabled by the Authentication Access Port, or AAP.
Tools & Projects
elfshaker/elfshaker: elfshaker stores binary objects efficiently
An incredibly neat tool that takes many binary files and compresses them effeciently in a custom format. Since binary ELF files don’t change often with rebuilds, and because normal compression like gzip doesn’t work well on binaries, this tool can produce amazing results. They claim a 0.01% compression ratio when it’s snapshotting many binaries at once! To prove their point, they also have elfshaker/manyclangs, which is a GitHub repo of all LLVM builds ever, stored in 100MB. Impressive!
memsetimplements which outperform the folly and glibc versions.
A spin on rCOBS that can compress data a bit further if it’s known to have a lot of
silvergasp/bazel-embedded: Tools for embedded/bare-metal development using bazel
A from-zero setup based on the Bazel build system that is tailored for embedded systems and development.
q3k/m16c-interface: A Serial IO programmer for Renesas M16C, includes security PIN bypass
A quick-and-dirty tool to load and dump the flash contents of a Renesas M16C.
Redis storage · ccache/ccache Wiki
At a previous employer, we always wanted to set up a distributed ccache cache. Unfortunately, it was always too complicated for us firmware engineers. I was surprised to find out that you can just use Redis (ideally hosted within a company VPC) and you can be off and running! Amazing.
- Renesas introduces sub 50 cents FPGA family with free Yosys-based development tools - CNX Software
Nuking most of my .vimrc and just using LunarVim by Fausto Núñez Alberro
I had never heard of LunarVim, so I wanted to share this post. Fausto is an employee at Memfault. Come join him and us. We’re hiring!
RTOS revolution: SEGGER embOS-Ultra enhances application performance with Cycle-resolution Timing
SEGGER released a new version of embOS which uses a tickless operation by default, which should lower power consumption.
- STMP157-OLinuXino-LIME2 Open Source Hardware Industrial Grade Linux computer is in mass production with 4 variants - Olimex
Need to test whether your embedded software can cope with various SSL configurations and misconfigurations. Point it at badssl.com and choose your own adventure.
Similar to the above, if you need to test your embedded software HTTP stack and various return values, encodings, and request types, httpbin is your friend!