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

 
 
> А кто как организует в своих программах контроль завершённости, транзакции обновления базы данных
Дон Амброзио
сообщение Mar 27 2008, 13:03
Сообщение #1


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



А кто как организует в своих программах контроль завершённости транзакции обновления базы данных во внутренней EEPROM или во внутренней FLASH микроконтроллеров ATmega? И кто как реализует откат назад в случае если обнаруживается, что предыдущая транзакция была прервана(не завершена)..А?


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Mar 27 2008, 14:58
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Вот тут:
Цитата
Если при этом произошла ошибка - то при последующем чтении CRC пакета будет неверное и система будет считать, что тут "пусто"; данные будут прочитаны из последнего актуального пакета.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Mar 27 2008, 17:45
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Пользую примерно такой-же способ как 'Непомнящий Евгений'. Только у меня не "флаг актуальности", а счётчик (2 байта). У кого он больше, тот пакет и последний. Ещё по теме хочу сказать, что длина пакета в EEPROM д.б. кратна 8 и начинаться он должен с адреса кратного 8. Я к такому выводу пришёл, когда у меня 8 байт в EEPROM объFFились. Видимо в EEPROM всё таки какие-то блоки 8 байтные имеются.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 27 2008, 23:28
Сообщение #4


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(galjoen @ Mar 27 2008, 20:45) *
Видимо в EEPROM всё таки какие-то блоки 8 байтные имеются.

Да нет наверное....
Это скорей всего потому у Вас 8-ми байтный блок объFFевился потому что у Вас "пакеты" в EEPROM по 8 байт, т.е. потому что Вы пишите в EEPROM 8-ми байтными блоками


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 28 2008, 03:15
Сообщение #5


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



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

Рассмотрим пример с 3-мя копиями и объяснение почему 3-х копий не хватает.

Допустим мы обновляем запись в базе данных во внутренней FLASH (или EEPROM) микроконтроллера. Одну копию записи успеваем обновить полностью, а вот на середине обновления 2-й копии транзакция прерывается выключением питания.

В результате мы имеем:
1-я копия обновлена полностью
2-я копия обновлена наполовину
3-копия вообще НЕ обновлена

Как быть? Мажоритарным голосованием восстановить не получиться, т.е. у нас нет хотя бы 2-х одинаковых копий записи - все 3 копии различны. А вот если бы у нас было 4 копии, то мы бы смогли "откатить" запись на основании значений записи для 3-й и 4-й записи. А если бы, допустим, транзакция была бы прервана на середине не 2-й , а 3-й копии, то тогда мы смогли бы даже не откатывать запись, а продолжить и завершить транзакцию, взяв данные совпадающих между собой 1-й и 2-й копий

Сообщение отредактировал Дон Амброзио - Mar 28 2008, 03:34


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Дон Амброзио   А кто как организует в своих программах контроль завершённости   Mar 27 2008, 13:03
- - Aesthete Animus   Что-то я плохо понял суть вопроса, не похоже, что ...   Mar 27 2008, 13:52
|- - Дон Амброзио   Цитата(Aesthete Animus @ Mar 27 2008, 16...   Mar 27 2008, 14:02
- - Непомнящий Евгений   В епром использую следующий механизм: Группа парам...   Mar 27 2008, 14:12
|- - Дон Амброзио   Цитата(Непомнящий Евгений @ Mar 27 2008, 17...   Mar 27 2008, 14:16
|- - Kirill Frolov   Цитата(galjoen @ Mar 27 2008, 20:45) Поль...   Mar 28 2008, 19:56
|- - Непомнящий Евгений   Цитата(Kirill Frolov @ Mar 28 2008, 22:56...   Mar 29 2008, 08:47
|- - Kirill Frolov   Цитата(Непомнящий Евгений @ Mar 29 2008, 11...   Mar 29 2008, 10:06
|- - Непомнящий Евгений   Цитата(Kirill Frolov @ Mar 29 2008, 13:06...   Mar 29 2008, 12:49
- - Непомнящий Евгений   Цитата(galjoen @ Mar 27 2008, 20:45) Толь...   Mar 28 2008, 05:17
- - blackbit   Не поверите - одним битом. Черным. Сколько не пыт...   Mar 28 2008, 06:06
|- - Дон Амброзио   Цитата(blackbit @ Mar 28 2008, 09:06) Не ...   Mar 28 2008, 06:28
- - Igor26   Цитата50% (слетит или не слетит).. Т.е. как у той ...   Mar 28 2008, 08:31
|- - Дон Амброзио   Цитата(Igor26 @ Mar 28 2008, 12:31) Затем...   Mar 30 2008, 14:00
|- - Непомнящий Евгений   Цитата(Дон Амброзио @ Mar 30 2008, 17:00)...   Mar 31 2008, 04:28
|- - Дон Амброзио   Цитата(Непомнящий Евгений @ Mar 31 2008, 07...   Mar 31 2008, 05:06
- - _Pasha   Чистая эмпирика: 1. Блоки данных с CRC16 в конце п...   Mar 29 2008, 10:17
- - oran-be   А я делаю очень просто - при закатывании данных к ...   Mar 30 2008, 14:13
- - Дон Амброзио   Цитата(oran-be @ Mar 30 2008, 18:13)...   Mar 30 2008, 14:32


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

 


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


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