Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: счетчик включений
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
oleg12
Добрый вечер
Второй раз попадаю в ситуацию когда есть возможность не получения полного вознаграждения за проект. Сам заказчик мелкий частник и проект не большой но сам заказчик не внушает полного доверия. По этому поводу хочу сделать счетчик включений на некое число. Хотелось бы выслушать ваши мнения по поводу этого. Раньше на этом моменте даже и не задумывался. Сам думаю реализовать таким способом - записать константу в еепром и одну переменную допустим 1 после запуска мк считываем переменную с еепром и делает инкремент этой переменной и после этого сравниваем ее с константой в еепром и если они совпадают выставляем порты на вывод и выставляем на них ноль. Если это все сделать в начале основного цикла? Или просто сделать константу, читать еепром делать инкремент и после этого делать сравнение?
aaarrr
Цитата(oleg12 @ Sep 11 2015, 17:53) *
Хотелось бы выслушать ваши мнения по поводу этого.

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

Но такая практика не приветствуется. Мало ли какие моменты будут. Вдруг с вами что-то случится, получится, что уже не заказчик вас обманул, а вы его.
kolobok0
Цитата(oleg12 @ Sep 11 2015, 17:53) *
...записать константу в еепром и одну переменную допустим 1 ...


Только лучше не одну переменную...
А подпись, переменную и CRC по всем данным.
И каждый раз переписывать/пересчитывать.
Если что то не совпадает - обычная работа. Если всё корректно(подпись, CRC), от тогда смотрим на счётчик.
Клиент не должен страдать, если произойдёт сбой программы, электроники или ышо чего.
Считайте в таком случае что это ваш косяк и вы должны платить.
Ну и срок гораздо бОльший чем срок оплаты. Раза в три... в жизни всякое бывает...
AlanDrakes
Как вариант, использовать не память EEPROM, а память программ. Допустим, выделить в середине FLASH памяти участок в несколько килобайт, и при каждом включении обнулять дополнительный бит.
Конечно, нужно будет защититься и от записи в эту область программатором...
Допустим, имеется участок в 1 кб в адресах 0x1000 ~ 0x11FF. При однобитовой записи, его хватит на 8000 включений.
При каждом новом включении, нужно будет проходиться по адресам, находить свежий ненулевой байт и самый верхний бит обнулять. Будет производиться запись страницы, но фактически, будет записан только 1 бит:
Начальное содержимое:
... 00 00 00 0F FF FF FF ...
Под запись:
... FF FF FF F7 FF FF FF ...
Результат:
... 00 00 00 07 FF FF FF ...
girts
Цитата(AlanDrakes @ Sep 13 2015, 14:18) *
Допустим, имеется участок в 1 кб в адресах 0x1000 ~ 0x11FF. При однобитовой записи, его хватит на 8000 включений.
При каждом новом включении, нужно будет проходиться по адресам, находить свежий ненулевой байт и самый верхний бит обнулять. Будет производиться запись страницы, но фактически, будет записан только 1 бит:

Интереснее всего сия методика будет работать на тех процах, где флеш с CRC на каждый байт и постраничным стиранием...
sm.gif
AlanDrakes
Цитата(girts @ Sep 14 2015, 09:13) *
Интереснее всего сия методика будет работать на тех процах, где флеш с CRC на каждый байт и постраничным стиранием...
sm.gif

Пардон, не приходилось работать с такими процессорами.
К тому же, реально можно писать в страницу только 1 бит, точнее "ронять" его в состояние нуля. Остальные биты при этом не будут перезаписаны, и стирание не требуется.
Самолично проверял на ATMega8535/1284p/48p и чём-то ещё. В них данный трюк работает.
В частности, возникает эдакий казус, когда не стёр память программатором, но снова пытаешься писать в неё же - начало как правило, совпадает (вектора прерываний), а вот дальше - наложение битов через логическое "И".

ЗЫ: Прежде чем потребуют пруфы, сразу добавлю:
- Программировал через UniProf.
- Программатор Громова (LPT, пока был, затем - COM).
- Иногда забывал сделать "Стирание кристалла" по запарке. Иногда - менял одну переменную так, чтобы записалось.
Проверялось не однократно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.