A featherweight C++ framework for abstracting embedded hardware using templates and constexprs