33 FlashSector(
const uint16_t &idx,
const uint32_t §or_start,
const uint32_t §or_size)
54 constexpr auto End() const -> uint32_t
62 constexpr auto InSector(
const uint32_t &addr)
const ->
bool
64 return addr >=
start && addr <
End();
72 std::stringstream out;
73 out <<
"FlashSector[Index=" <<
index
74 <<
", Start=0x" << std::setw(8) << std::setfill(
'0') << std::hex <<
start
75 <<
", End=0x" << std::setw(8) << std::setfill(
'0') << std::hex <<
End()
83 typedef std::vector<FlashSector> FlashMap;
91 static auto GetSector(
const FlashMap &map,
const uint32_t &addr) -> std::optional<const FlashSector>
93 for (
const auto &sec : map)
95 if (sec.InSector(addr))
106 static auto MakeSimpleLayout(
const uint32_t& start_addr,
const uint32_t& sector_size,
const uint16_t& sectors) -> FlashMap
108 auto ret = FlashMap();
109 for(
auto x = 0; x < sectors; x++)
111 ret.push_back(
FlashSector(x, start_addr + (sector_size * x), sector_size));
120 const std::function<
void(
const uint32_t&,
const uint32_t&,
const FlashSector&)>& fnOp) ->
void
122 for (
auto addr = start; addr < end;)
126 auto n_bytes = std::min(end, sec_info->End()) - addr;
128 fnOp(addr, n_bytes, sec_info.value());
144 {0, 0x08000000, 0x4000},
145 {1, 0x08004000, 0x4000},
146 {2, 0x08008000, 0x4000},
147 {3, 0x0800c000, 0x4000},
148 {4, 0x08010000, 0x10000},
149 {5, 0x08020000, 0x20000},
150 {6, 0x08040000, 0x20000},
151 {7, 0x08060000, 0x20000},
152 {8, 0x08080000, 0x20000},
153 {9, 0x080a0000, 0x20000},
154 {10, 0x080c0000, 0x20000},
155 {11, 0x080e0000, 0x20000}