roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 13:49

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 10:46 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Есть устройства, которое накапливают в ПЗУ данные (регистраторы). Нужно периодически выгружать данные с регистраторов во внешнее ПЗУ iButton. После выгрузки, ПЗУ регистратора очищается. Необходимо избежать ситуаций:

  • при выгрузке произошла ошибка, а ПЗУ регистратора очищено (потеря данных)
  • данные были выгружены, но ПЗУ не очищено (повторная выгрузка)

Придумал вот такой алгоритм:
В iButton, в начале, хранится счетчик блоков. Далее следуют блоки данных, в начале каждого - длина блока. Регистратор считывает счетчик, и проходит по имеющимся блокам, вычисляя адрес свободного участка памяти. Начинает писать данные. Если все данные выгружены успешно, регистратор обновляет счетчик блоков. Если запись счетчика успешна - регистратор очищает внутреннее ПЗУ.

Проблем у такого алгоритма две:
  • если запись увеличенного счетчика блоков прошло успешно, но произошла ошибка при чтении подтверждения записи от iButton, получаем дубликат данных - в iButton валидные данные, а регистратор считает, что данные не выгружены
  • Если произошла ошибка при записи счетчика - то это может означать полное повреждение данных в iButton

Первую проблему думаю решить так: перед записью данных, регистратор вычисляет контрольную сумму по своим данным, и записывает ее вместе с блоком данных. Тогда при повторной попытке выгрузки регистратор сможет определить, что этот блок уже был выгружен, и просто очистит свое ПЗУ, без повторной выгрузки.

А вот со второй проблемой не могу придумать. Хранить две копии счетчика? Вроде ничем не поможет, как определять какая из копий верная? Есть у кого-нибудь мысли по этому поводу?

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 10:50 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Две копии счетчика, в каждой CRC + номер версии, правильной считается та, которая с правильным CRC и большим номером.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 12:29 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Спасибо, попробую. Копии для надежности по разным страницам раскидаю

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 16:46 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Алгоритм обновления счетчиков получился такой:

в начальном состоянии оба счетчика валидны, и содержат одинаковое значение.

Считываем оба счетчика, проверяем CRC. За текущее значение принимаем тот, у которого CRC совпадает, если совпадают оба - берем большее. Увеличиваем на 1, и пишем сначала в тот, у которого была неверная CRC (если обе верные - то в тот, у которого счетчик был меньше). Если запись не удалась, считаем всю операцию неуспешной. Иначе, пишем во второй экземпляр, независимо от результата этой записи операцию считаем успешной. Таким образом, всегда будет как минимум одна копия счетчика с правильным значением, а не мусором.

Если значение счетчика на самом деле записалось правильно, а ошибка была только на этапе подтверждения записи - то при повторной попытке переноса данных регистратор сможет распознать эту ситуацию по контрольной сумме блока данных.

Все правильно?

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 18:13 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
В целом да, всё так, но не понял, что за "ошибка на этапе подтверждения записи".
И вроде нет нужды, если операция успешна, писать во второй счетчик.
При следующем чтении второй счетчик и так будет проигнорирован, т.к. он тоже правильный и там меньшее значение.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка данных в ПЗУ iButton
СообщениеДобавлено: 27 май 2011, 18:44 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
=DeaD= писал(а):
что за "ошибка на этапе подтверждения записи"


Правильность записи определяется по специальному значению считанному после записи - таблетка подтверждает, что все записалось успешно. Но неполучение подтверждения еще не означает что запись не удалась - например таблетку сняли со считывателя пока передается подтверждение.

=DeaD= писал(а):
И вроде нет нужды, если операция успешна, писать во второй счетчик.

Согласен

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO