#pragma once #include #include #include #include "src/Helpers/BiMap.hpp" namespace Targets::TargetDescription { enum class MemorySegmentType { REGISTERS, IO, EEPROM, RAM, FLASH, SIGNATURES, FUSES, LOCKBITS, OSCCAL, }; struct MemorySegment { std::string name; MemorySegmentType type; std::uint32_t startAddress; std::uint32_t size; std::optional pageSize; /** * Mapping of all known memory segment types by their name. Any memory segments belonging to a type * not defined in here should be ignored. */ static const inline BiMap typesMappedByName = { {"regs", MemorySegmentType::REGISTERS}, {"io", MemorySegmentType::IO}, {"eeprom", MemorySegmentType::EEPROM}, {"ram", MemorySegmentType::RAM}, {"flash", MemorySegmentType::FLASH}, {"signatures", MemorySegmentType::SIGNATURES}, {"fuses", MemorySegmentType::FUSES}, {"lockbits", MemorySegmentType::LOCKBITS}, {"osccal", MemorySegmentType::OSCCAL}, }; }; }