• Задачка из жызни. Дано: flash EEPROM на 100 байт. Другого постоянного хранилища состояния программы нет. Перезапись байта немного истирает flash, в результате гарантируется чтение/запись в пределах 10 тыс. раз, а далее вероятность успешной записи и чтения записанного начинает с некоторой скоростью уменьшаться с каждой новой записью. Стоит задача: каждые несколько секунд записывать текущее (однобайтное) значение одного параметра (чтобы, скажем, отправлять его в сеть), потом читать его.

    Требуется найти такой алгоритм, который позволит максимально долго выполнять задачу чтения использовать flash без сбоев. Задача со звёздочкой: аналитически описать вероятность сбоя K-ой операции записи для заданного алгоритма, если параметры (объём, вероятность сбоя) заданы в общем виде.

Replies (6)

  • @meowthsli, поначалу кажется что надо тупо циклически писать в следующий адрес, однако это не совсем тупо, т к адрес тоже надо где-то хранить )
  • @meowthsli, Бьем память по три байта (один байт — состояние, еще два — счетчик). Перед записью состояния читаем первые три байта — узнаем, сколько раз писали в этот триплет. Если больше какого-то порога — читаем следующий триплет, пока не найдем триплет, в котором счетчик маленький. Туда и пишем. Читаем аналогично.
  • @AlexSane, подразумевает что чтение бесплатное
  • @lurker, По условию чтение бесплатное. Если нет — можно выделить первый байт под номер триплета — экономим чтения.
  • @AlexSane, тогда если первый байт сломается, всей системе кирдык
  • @lurker, В него редко пишут. Можно еще, конечно, добавить контрольные суммы — опять по байту и пропускать те, который разошлись. Или тупо писать тройным повторением.