реклама на сайте
подробности

 
 
> Нахождение последней записи, Помогите придумать надежный алгоритм
paskal
сообщение Jan 20 2009, 18:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Есть флеш память некоторого объема, куда последовательно одну за другой записываем страницы. Это значит что при каждой записи адрес увеличивается на размер страницы, а дойдя до конца памяти, адрес циклически возвращается к 0. Т.е. старые записи закрываются новыми. Для нахождения последней записи мы нумеруем их, и номер записываем вместе со страницей. Номеров больше чем страниц (например страниц 128, нумерация от 0 до 255). Естественно что и номера тоже циклически возвращаются к 0. При включении устройства мы просматриваем все страницы, и по номеру должны найти ту которая была записана последней.
Вопрос: какой алгоритм выбрать для нахождения последней записи? Задача осложнена тем, что устройство работает в условии помех и сбоев и существуют ошибочные номера. Алгоритм нужен такой чтоб если какая то страница один раз выбрана последней, потом после некоторой работы, включения-выключения, не могла бы выбраться более раняя запись.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Jan 26 2009, 11:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Как Вам такой вариант: для нумерации страниц использовать много разрядов, чтобы счётчик за время жизни устройства ни разу не переполнился. Тогда поиск последнего номера страницы очень простой: просто ищем максимальный номер.
Про сбои: они разные бывают. Если считать, что сбоить может что угодно и как угодно, то никакой алгоритм не поможет (может сбоить и процессор, и память программ). Поэтому по поводу сбоев в общем случае советовать что-либо бесполезно, сначала опишите задачу подробнее.
Go to the top of the page
 
+Quote Post
paskal
сообщение Jan 26 2009, 20:28
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(scifi @ Jan 26 2009, 14:49) *
Как Вам такой вариант: для нумерации страниц использовать много разрядов, чтобы счётчик за время жизни устройства ни разу не переполнился. Тогда поиск последнего номера страницы очень простой: просто ищем максимальный номер.
Про сбои: они разные бывают. Если считать, что сбоить может что угодно и как угодно, то никакой алгоритм не поможет (может сбоить и процессор, и память программ). Поэтому по поводу сбоев в общем случае советовать что-либо бесполезно, сначала опишите задачу подробнее.

Использование большего количества разрядов разрядов действительно напрашивается. Но не подходит потому что не хватает места. Размер страницы 16 байт фиксирован физически, определяется устройством флеша. Я и так "утрамбовывал" данные по ниблам, осталось еще 4 разряда, а больше места не найти.
Сбоит только флеш, т.к. она сделана в виде внешней памяти, связанной по I2C. Процессор, и все что внутри него - ОЗУ, ПП, регистры, итд - не сбоит.
А смысл задачи в том, что в программе была ошибка. Из за неё во флеш писались неправильно номера страниц. К счастью ошибка вовремя обнаружилась и мне вернули из цеха кучу плат. Если просто записать правильную программу, то происходят описанные в предидущих постах глюки, т.к. последовательность номеров перепутана. Правда можно оставить плату включенной, подождать более 30 мин, за это время флеш целиком перезапишется корректными данными. Но учитывая количество понаделанных плат это жестокий метод smile.gif
Вот и хотелось придумать алгоритм, чтоб правильно работал и с перепутанными номерами страниц не сбивая хронометраж записей.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 27 2009, 07:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(paskal @ Jan 26 2009, 23:28) *
Вот и хотелось придумать алгоритм, чтоб правильно работал и с перепутанными номерами страниц не сбивая хронометраж записей.

Боюсь, нет такого алгоритма.
Если лень ждать 30 минут, то сделайте вспомогательную прошивку, которая перелопачивает флэш и исправляет неправильные номера страниц. Или сделайте эту процедуру частью стандартной прошивки.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 04:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016