At the recent 2018 Rust All Hands, I met up with Katharina @spacekookie, who works on an open source project that creates software for Embedded Linux Devices. She had talked with the other engineers on the project about including some Rust components, however with their limited flash storage space (8MB for the whole firmware, including operating system and all other software), she was worried that the Rust binaries wouldn't fit. The current webserver component for their project was measured in the 100's of KB, while the Rust binary she produced was already multiple MBs, even with a
Phew, it's been a busy six months or so since I've last posted. So busy, in fact, that I had two weeks of vacation left over from last year that I was able to roll over to this year, but it had to be used by the end of Q1.
Tomorrow (2018-02-19) kicks off my first day of vacation, and I wanted to share what I'm planning on doing for the next two weeks - something I'm calling The Raumfahrer Projekt.
Recently I've gotten the chance to work in Rust a little more often, and I've been using the wonderful web framework Rocket. Primarily, I've been using it to develop a REST server, serving and receiving JSON data. I've also been using error_chain, which is a great tool to avoid error handling boilerplate.
However, I was having difficulty getting them to work together the way that I wanted. In my mind, if my Rocket handler returned
Ok(Json(T)), it would make sense to return the JSON in the body, and a return code of 200. If my Rocket handler returned
Err(Json(T)), then the server should return
400 (or maybe
500), with my error in the body.
As a note, this will be the first in a series of posts exploring content I will be presenting to the Rust DC group on June 15th, where I will be integrating Rust code on the nRF52 Development Kit to create a Rust-Powered Bluetooth Peripheral. See the meetup event for more information. This post will serve as the first introduction to a few topics, and I will be building on this information as I later discuss exact techniques that can be used to get Rust on more and more embedded systems. In general, I will be focusing on integrating Rust into existing C and C++ ecosystems, to reduce the barrier to entry for Embedded Rust Developers.
Next > >
A quick note: I've added a section for "Native" Testing in my previous post regarding CI Testing Techniques for Embedded Systems. Its definitely an important technique that I should have mentioned from the start! Check it out here, and let me know if there are any other techniques that I missed. Thanks to Ludwig Knüpfer for bringing it to my attention.