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

 
 
> А кто как организует в своих программах контроль завершённости, транзакции обновления базы данных
Дон Амброзио
сообщение 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
Kirill Frolov
сообщение Mar 28 2008, 19:56
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(galjoen @ Mar 27 2008, 20:45) *
Пользую примерно такой-же способ как 'Непомнящий Евгений'. Только у меня не "флаг актуальности", а счётчик (2 байта). У кого он больше, тот пакет и последний. Ещё по теме хочу сказать, что длина пакета в EEPROM д.б. кратна 8 и начинаться он должен с адреса кратного 8. Я к такому выводу пришёл, когда у меня 8 байт в EEPROM объFFились. Видимо в EEPROM всё таки какие-то блоки 8 байтные имеются.


У меня тоже счётчик. Надо сказать с ним есть непределённость определённая... Вобщем или кодов для счёта будет БОЛЬШЕ числа страниц flash для перезаписи. Или нельзя сказать чётко какая последняя. С битом -- это по-моему бред. Как там последнюю найти? Только если не удалять сразу неактуальные записи. Я вот не удаляю, стираю только при записи. А дописываю как есть по кругу (есть пул flash-страниц для циклической перезаписи). Да, когда у меня было всего 2 страницы в другом приборе, там было 2 БИТА. Ибо по 1 биту нифига непонятно кто последний в таком случае. А так есть серия номеров последовательно с разрывом (зацикленность опускаем), соответственно тот что перед разрывом -- последний. Поэтому номеров и БОЛЬШЕ должно быть чем страниц.

Да, про неопределённость. Это когда разрывов в нумерации больше одного. Тут хоть по rand() выбирай нужный блок...

Сообщение отредактировал Kirill Frolov - Mar 28 2008, 20:07


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 29 2008, 08:47
Сообщение #5


Знающий
****

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



Цитата(Kirill Frolov @ Mar 28 2008, 22:56) *
С битом -- это по-моему бред. Как там последнюю найти? Только если не удалять сразу неактуальные записи.


см разобранный пример выше. Записи никогда не удаляю. Самая старая просто перетирается, когда надо записать новую.
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Mar 29 2008, 10:06
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(Непомнящий Евгений @ Mar 29 2008, 11:47) *
см разобранный пример выше. Записи никогда не удаляю. Самая старая просто перетирается, когда надо записать новую.


5 раз смотрел, ничего не понял. Я знаю, что для кодировании информации выбора одного из N надо минимум log2(N)+1 битов. А тут ерунда какая-то. Напиши какие значения этого бита у 9 последовательных записей. (т.е. чистый флеш, записали раз, записали два...) Сколько кстати блоков флеша? Не больше 8-и? Если это работает, значит старые записи таки переписываются, хотя бы этот бит сбрасывается.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 29 2008, 12:49
Сообщение #7


Знающий
****

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



Цитата(Kirill Frolov @ Mar 29 2008, 13:06) *
Напиши какие значения этого бита у 9 последовательных записей. (т.е. чистый флеш, записали раз, записали два...) Сколько кстати блоков флеша? Не больше 8-и? Если это работает, значит старые записи таки переписываются, хотя бы этот бит сбрасывается.

Блоков ("слотов") - теоретически сколько угодно. Я обычно делаю не больше 5.

Пример (обозначение: ПS(F), где S - номер слота, F - флаг. П2(1) - пакет во втором слоте, флаг = 1)
Код
0. Начальное состояние: пусто - все слоты пусты (т.е. у каждого неверная CRC)
1. Пишем 1-й пакет: П1(1) пусто .....
2. Пишем 2-й пакет П1(1) П2(1) пусто .......
...
9. Пишем 9-й пакет: П1(1) П2(1) ......... П8(1) П9(1)
10. Пишем 10-й пакет:  П1(0) П2(1) ......... П8(1) П9(1)
11. Пишем 11-й пакет:  П1(0) П2(0) П3(1) ......... П8(1) П9(1)
...
18. Пишем 18-й пакет: П1(0) П2(0) .... П8(0) П9(0)
19. Пишем 19-й пакет: П1(1) П2(0) ..... П9(0)
и т.д.

Чтобы определить актуальный пакет, ищем первый переход 0-1 или 1-0.
Если нашли - то пакет слева от перехода и будет актуальным (случай 10 - актуален П1, 11 - П2, 19 - П1)
Если не нашли - актуален последний пакет (случаи 1-9, 18).

PS Насчет теории информации - лень доказывать, но интуитивно - для этого примера у тебя есть 9 информационных бит (частично зависимых между собой), а не 1. Причем не совсем бит - флаг может быть 1, 0 или НЕВЕРЕН (у пакета с неправильной CRC).
Т.е. получается соответствие:
1 НЕВЕРЕН ... НЕВЕРЕН = 1-й пакет
...
1 1 1 1 .. 1 = последний пакет
0 0 1 ... 1 = 2-й пакет
и т.д.
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
|- - Дон Амброзио   Цитата(galjoen @ Mar 27 2008, 20:45) Види...   Mar 27 2008, 23:28
||- - Дон Амброзио   Вот я думаю, что для возможности восстановления по...   Mar 28 2008, 03:15
- - Непомнящий Евгений   Цитата(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 Текстовая версия Сейчас: 23rd July 2025 - 21:35
Рейтинг@Mail.ru


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