11#include "libxr_def.hpp"
12#include "libxr_type.hpp"
21template <
size_t FLASH_SIZE>
35 size_t min_erase_size = FLASH_SIZE / 2,
36 size_t min_write_size =
sizeof(uint8_t),
37 bool write_order_check =
false,
bool write_as_one_check =
false)
38 :
Flash(min_erase_size, min_write_size,
RawData(&flash_area_, sizeof(flash_area_))),
39 file_path_(file_path),
40 write_order_check_(write_order_check),
41 write_as_one_check_(write_as_one_check)
43 std::ifstream file(file_path_, std::ios::binary);
46 file.read(
reinterpret_cast<char*
>(flash_area_.data()),
47 static_cast<std::streamsize
>(flash_area_.size()));
58 ErrorCode
Erase(
size_t offset,
size_t size)
override
63 if ((offset + size) > flash_area_.size())
65 return ErrorCode::OUT_OF_RANGE;
82 if ((offset + data.
size_) > flash_area_.size())
84 return ErrorCode::OUT_OF_RANGE;
90 return ErrorCode::FAILED;
93 if (write_order_check_)
98 uint8_t* dst = flash_area_.data() + offset;
99 const uint8_t* src =
static_cast<const uint8_t*
>(data.
addr_);
101 if (write_as_one_check_)
103 for (
size_t i = 0; i < data.
size_; ++i)
105 if ((~dst[i] & src[i]))
108 return ErrorCode::FAILED;
118 std::string file_path_;
119 std::array<uint8_t, FLASH_SIZE> flash_area_ = {};
120 bool write_order_check_;
121 bool write_as_one_check_;
123 ErrorCode SyncToFile()
125 std::ofstream file(file_path_, std::ios::binary | std::ios::trunc);
128 return ErrorCode::FAILED;
130 file.write(
reinterpret_cast<const char*
>(flash_area_.data()),
131 static_cast<std::streamsize
>(flash_area_.size()));
132 return ErrorCode::OK;
常量原始数据封装类。 A class for encapsulating constant raw data.
size_t size_
数据大小(字节)。 The size of the data (in bytes).
const void * addr_
数据存储地址(常量)。 The storage address of the data (constant).
Abstract base class representing a flash memory interface. 抽象基类,表示闪存接口。
size_t MinWriteSize() const
Returns the minimum writable block size in bytes. 获取最小可写块大小(字节)。
size_t MinEraseSize() const
Returns the minimum erasable block size in bytes. 获取最小可擦除块大小(字节)。
Linux 二进制文件闪存实现 / Linux binary-file flash implementation.
ErrorCode Write(size_t offset, ConstRawData data) override
写入闪存数据 / Write flash data
LinuxBinaryFileFlash(const std::string &file_path, size_t min_erase_size=FLASH_SIZE/2, size_t min_write_size=sizeof(uint8_t), bool write_order_check=false, bool write_as_one_check=false)
构造 Linux 文件闪存对象 / Construct Linux file-backed flash
ErrorCode Erase(size_t offset, size_t size) override
擦除闪存区域 / Erase flash area
static void FastSet(void *dst, uint8_t value, size_t size)
快速内存填充 / Fast memory fill
static void FastCopy(void *dst, const void *src, size_t size)
快速内存拷贝 / Fast memory copy
原始数据封装类。 A class for encapsulating raw data.