Add function to load arbitrary type from flash
This commit is contained in:
parent
6edb2e5a21
commit
f9014aea6c
17
flash.hpp
17
flash.hpp
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
#define F(str) (reinterpret_cast<const ::detail::FlashString *>(PSTR(str)))
|
||||
@ -13,3 +15,18 @@ namespace detail {
|
||||
struct FlashString;
|
||||
|
||||
} // namespace detail
|
||||
|
||||
namespace flash {
|
||||
|
||||
template <typename T>
|
||||
static T load(const T &object)
|
||||
{
|
||||
auto buffer = T{};
|
||||
auto rawBuffer = reinterpret_cast<std::byte *>(&buffer);
|
||||
for (auto i = std::size_t{0}; i < sizeof(T); ++i) {
|
||||
rawBuffer[i] = static_cast<std::byte>(pgm_read_byte(&reinterpret_cast<const std::byte *>(&object)[i]));
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
} // namespace flash
|
||||
|
Loading…
Reference in New Issue
Block a user