Skip to content

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 by writeAnything().
  • 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);
}