18void ReadFlashOrExit(
size_t offset, RawData data)
20 [[maybe_unused]]
const auto flash_io_result = flash_.Read(offset, data);
21 REQUIRE(flash_io_result == ErrorCode::OK);
31template <
typename Data>
32void ReadFlashOrExit(
size_t offset, Data& data)
34 ReadFlashOrExit(offset, RawData(data));
43void WriteFlashOrExit(
size_t offset, ConstRawData data)
45 [[maybe_unused]]
const auto flash_io_result = Write(offset, data);
46 REQUIRE(flash_io_result == ErrorCode::OK);
56template <
typename Data>
57void WriteFlashOrExit(
size_t offset,
const Data& data)
59 WriteFlashOrExit(offset, ConstRawData(data));
68void EraseFlashOrExit(
size_t offset,
size_t size)
70 [[maybe_unused]]
const auto flash_io_result = flash_.Erase(offset, size);
71 REQUIRE(flash_io_result == ErrorCode::OK);
81void CopyFlashData(
size_t dst_offset,
size_t src_offset,
size_t size)
83 for (
size_t i = 0; i < size; i += MinWriteSize)
85 ReadFlashOrExit(src_offset + i, {write_buffer_, MinWriteSize});
86 WriteFlashOrExit(dst_offset + i, {write_buffer_, MinWriteSize});
96size_t AlignSize(
size_t size)
98 return static_cast<size_t>((size + MinWriteSize - 1) / MinWriteSize) * MinWriteSize;
111ErrorCode Write(
size_t offset, ConstRawData data)
115 return ErrorCode::OK;
118 if (data.size_ % MinWriteSize == 0)
120 return flash_.Write(offset, data);
124 auto final_block_index = data.size_ - data.size_ % MinWriteSize;
125 if (final_block_index != 0)
127 auto ec = flash_.Write(offset, {data.addr_, final_block_index});
128 if (ec != ErrorCode::OK)
133 Memory::FastSet(write_buffer_, 0xff, MinWriteSize);
135 write_buffer_,
reinterpret_cast<const uint8_t*
>(data.addr_) + final_block_index,
136 data.size_ % MinWriteSize);
137 return flash_.Write(offset + final_block_index, {write_buffer_, MinWriteSize});
static void FastCopy(void *dst, const void *src, size_t size)
快速内存拷贝 / Fast memory copy
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes