Odin Holmes


Odin Holmes has been programming bare metal embedded systems for 15+ years and, as any honest nerd admits, most of that time was spent debugging his stupid mistakes. With the advent of the 100x speed up of template metaprogramming provided by C++11 his current mission began: teach the compiler to find his stupid mistakes at compile time so he has more free time for even more template metaprogramming.

Odin Holmes is the author of the kvasir::bit library, a DSL which wraps bare metal special function register interactions allowing full static checking and a considerable efficiency gain over common practice. He is also active in building and refining the tools need for this task such as the brigand MPL library, the kvasir::mpl. He is also a contributor the SG14 working group and co-organizer of the embo.io bare metal embedded conference.



Modern Embedded APIs, Bare Metal Should Cause Less Pain (2016)

Scott Meyers has often publicly expressed our communal goal as software developers and library designers: “make interfaces easy to use correctly and hard to use incorrectly”. Current bare metal embedded code is often about as far from that goal as syntactically possible. In other words we have failed at that goal, as is true in many other domains. There are many reasons given for this disparity, however most of them are either myths or outdated. C++11/14 has given us an incredible new tool set to work with, its high time we used it. The domain specific constraints, namely the flexibility of threading model, memory management, exotic hardware drivers and the uncompromising need for speed are quite stringent. On the other hand the fact that programs are smaller and RTTI is usually stripped any way make this domain a metaprogrammers paradise. In this talk I will show many domain specific as well an universal methods with which complex, powerful and highly flexible libraries leveraging advanced generic techniques such as lazy evaluation and policy based class design can be hidden behind friendly, intuitive and fully static checked public interfaces. This will not be a typical API talk, lets face it, most "typical" APIs are outdated. This will be a rabble rousing "rethink what you think you know about APIs" talk and a "heres a syntactic tool you (probably) didn't know existed" talk.