Цитата(paskal @ Jan 20 2009, 21:55)

Есть флеш память некоторого объема, куда последовательно одну за другой записываем страницы. Это значит что при каждой записи адрес увеличивается на размер страницы, а дойдя до конца памяти, адрес циклически возвращается к 0. Т.е. старые записи закрываются новыми. Для нахождения последней записи мы нумеруем их, и номер записываем вместе со страницей. Номеров больше чем страниц (например страниц 128, нумерация от 0 до 255). Естественно что и номера тоже циклически возвращаются к 0. При включении устройства мы просматриваем все страницы, и по номеру должны найти ту которая была записана последней.
Вопрос: какой алгоритм выбрать для нахождения последней записи? Задача осложнена тем, что устройство работает в условии помех и сбоев и существуют ошибочные номера. Алгоритм нужен такой чтоб если какая то страница один раз выбрана последней, потом после некоторой работы, включения-выключения, не могла бы выбраться более раняя запись.
По поводу алгоритма поиска - сравниваем индекс следующей страницы с текущей. Если он не равен текущий индекс + 1, то текущая страница - последняя.
На Си будет как-то так:
Код
//////////////////////////////////////////////////////
struct _sPage
{
BYTE bIndex;
_sPage* psNext;
} sPage;
sPage* psCurPage_ = psFirst;
while (psCurPage_->bIndex + 1 == psCurPage_->psNext->bIndex)
psCurPage_ = psCurPage_->psNext;
// psCurPage_ указывает на последнюю записанную страницу
//////////////////////////////////////////////////////
Про ошибочные номера нужно подробнее. Не понял что там может получиться