Как хранить и изменять переменные в энергонезависимой памяти ESP32

Есть устройство на базе ESP32, в устройстве стоит SD-карта с файлом, на котором отсортированный список идентификационных номеров (hex формат), по которым осуществляется поиск и предоставляется определенный доступ. Список периодически обновляется с удаленного сервера. Из-за большого числа этих номеров (~500000) поиск осуществляется посредством массива индексов (для значения массива берутся 4 старших разряда каждого 32 номера). Сейчас предварительно сгенерированный массив просто забит в код программы, как глобальная переменная, это работает и поиск по файлу на SD карте занимает порядка 60 ms, но это лишает возможности изменять этот массив в соответствии с измененным списком номеров, точнее, изменять его так, чтобы после перезагрузки устройства он остался в последнем состоянии, а не в том, которое забито в коде. Была попытка использовать эмуляцию EEPROM (NVS-раздел flash памяти), но имеющееся API предоставляет возможность лишь поиска по конкретному ключу, а это, увы, не подходит. Хотелось бы просто иметь возможность держать этот массив в энергонезависимом куске памяти и обращаться к нему из программы, как если бы он был простой переменной. Для ясности приведу кусок кода, как сейчас происходит поиск:

 for (int i = 0; i < 15625; i++) {
    if (searchIndexHex <= index_mass[i]) {
      if (i != 0) {
        file.seek((i - 1) * 18 * 32);
      } else file.seek(0);
      break;
    }
  }

То есть, после считывания, условно, метки с пропуска, берем 4 старших разряда от её номера и бежим искать подобное по массиву index_mass, когда находим – соответственно смещаем указатель в файле на SD-карте и дальше осуществляем поиск по файлу. Как лаконично осуществить подобное с помощью NVS не очень представляю, может есть способ расположить этот массив в энергонезависимой части памяти, при этом сохранив к нему доступ в том виде, в каком он сейчас? Или какие-то удобные альтернативы?

Разработка ведется в Arduino IDE, соответственно, с использованием Arduino-библиотек


Ответы (0 шт):