//--------------------------------------------------------------------------- bool val_in_region(const region_t &r, int value) { for(unsigned i = 0; i < r.size(); i++) { if(value >= r[i].from && value <= r[i].to) return true; } return false; }
namespace map { constexpr region_t local_sram_0 { 0x10000000, 96_KiB }; constexpr region_t local_sram_1 { 0x10080000, 40_KiB }; constexpr region_t ahb_ram_0 { 0x20000000, 32_KiB }; constexpr region_t ahb_ram_1 { 0x20008000, 16_KiB }; constexpr region_t ahb_ram_2 { 0x2000c000, 16_KiB }; constexpr region_t spifi_uncached { LPC_SPIFI_DATA_BASE, 1_MiB }; constexpr region_t spifi_cached { LPC_SPIFI_DATA_CACHED_BASE, spifi_uncached.size() }; ///////////////////////////////// constexpr region_t m4_code { local_sram_1.base(), 32_KiB }; constexpr region_t shared_memory { m4_code.end(), 8_KiB }; constexpr region_t m4_code_hackrf = local_sram_0; } /* namespace map */
//--------------------------------------------------------------------------- bool parse_int_region(const std::string &src, region_t &dst) { REGION_ELEM elem; int *cur = NULL; unsigned i; for(i = 0; i < src.size(); i++) { if(src[i] >= '0' && src[i] <= '9') { if(cur == NULL) { cur = &elem.from; elem.from = 0; elem.to = 0; } else if(cur == &elem.to && elem.to == -1) elem.to = 0; (*cur) *= 10; (*cur) += src[i] - '0'; if(cur == &elem.from) elem.to = *cur; } else if(src[i] == ',') { if(cur != NULL) { if(elem.to == -1) elem.to = 0x7fffffff; dst.push_back(elem); cur = NULL; } } else if(src[i] == '-') { if(cur == NULL) { elem.from = 0; elem.to = -1; cur = &elem.to; } else if(cur == &elem.to) return false; //Error else { elem.to = -1; cur = &elem.to; } } else if(src[i] == ' ' || src[i] == '\t') continue; else return false; //Error } if(cur != NULL) { if(elem.to == -1) elem.to = 0x7fffffff; dst.push_back(elem); } return true; }