readAnything¶
Signatures¶
template <class T> bool SPIFlash::readAnything(uint32_t _addr, T& data, bool fastRead = false)template <class T> bool SPIFram::readAnything(uint32_t _addr, T& data, bool fastRead = false)
What It Is For¶
Read raw bytes into an object of type T, reversing writeAnything.
Parameters¶
_addr: Address where object bytes begin.data: Output object reference to fill.fastRead: Optional read acceleration mode.
Behavior Details¶
Only safe when T layout matches exactly what was written (same fields/order/types/packing).
Return Semantics¶
Returns true when object bytes were read successfully.
Failure Behavior¶
Mismatched type layout gives corrupted values even if API reports success.
Common Mistakes¶
- Reading into a type layout different from what was written.
- Assuming success return means semantic correctness of decoded fields.
- Using packed/unpacked structs inconsistently across toolchains.
Choosing Between Similar APIs¶
- Use
readAnything()to reconstruct objects written bywriteAnything(). - Use typed reads for single values to reduce layout-coupling risk.
- Use array reads when decoding custom protocol payloads manually.
Example¶
Config cfgOut{};
if (flash.readAnything(addr, cfgOut)) {
Serial.println(cfgOut.gain);
}