|
|
  |
ограничение eeprom |
|
|
|
Jul 25 2011, 10:28
|
Группа: Участник
Сообщений: 13
Регистрация: 25-07-11
Пользователь №: 66 399

|
всем привет! какое-то время назад в силу нескольких обстоятельств решил постичь программирование pic-ов,но пока только просто читаю книжки и никогда ничего не программировал, начал с Корабельникова, и пока особых неясностей нет, но возможно немного заглядывая вперёд, хочу задать несколько вопросов по EEPROM, просто именно об этом нигде не пишут а интересно так что даже засыпать стал плохо; насколько я понял циклов обращений к этой памяти хоть и вроде много но если это делать из программы, то этот ресурс очень быстро закончится, так как от начала до конца программа пробегает за какие-то микросекунды.Вот взять к примеру автосигнализацию, допустим мы установили какие-то новые настройки в режиме так называемого пользовательского программирования, я как понимаю именно эти настройки хранятся в EEPROM, поскольку энергонезависимы, но это значит в тексте программы присутствует постоянное обращение к этим значениям, почему же тогда EEPROM не выходит из строя?
Ещё Корабельников пишет что может сделать ограничение на количество включений контроллера, например - 3, я понимаю что он каким-то образом привязывается к событию включения, записывает в EEPROM - 3, а потом при каждом включении отнимается единица, а затем при нуле программа зацикливается навсегда и не продолжается, - и вот тут вопрос вот в чём: как так можно отнять единицу всего один раз если программа крутится по кругу постоянно(она же всегда будет отнимать)?-единственное что приходит мне в голову так это в конце программы вместо end ставить безусловный переход, например на 5-ю строчку программы, но разве так можно?
И ещё вопрос- можно ли программно ввести ограничение на работу контроллера на один год, а восстановить, например, вводом пароля, если да то на каких пиках так реально сделать и какова общая логика выполнени такой задачи?
|
|
|
|
|
Jul 25 2011, 12:13
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(стас @ Jul 25 2011, 14:28)  циклов обращений к этой памяти хоть и вроде много но если это делать из программы, то этот ресурс очень быстро закончится Чтение EEPROM ресурс не уменьшает. Ячейки деградируются при записи/стирании. Цитата(стас @ Jul 25 2011, 14:28)  как так можно отнять единицу всего один раз если программа крутится по кругу постоянно(она же всегда будет отнимать)? Значение в EEPROM можно записать при программировании ("заливке" программы). При старте по включению питания (в самом начале программы) считываем ячейку, и, если значение равно нулю, то программу не выполняем ("крутимся" в бесконечном цикле), в противном случае: вычитаем единицу и записываем новое значение в EEPROM Цитата(стас @ Jul 25 2011, 14:28)  можно ли программно ввести ограничение на работу контроллера на один год, а восстановить, например, вводом пароля, если да то на каких пиках так реально сделать и какова общая логика выполнени такой задачи? Можно, но устройство должно иметь собственный энергонезависимый календарь или получать текующую дату из некоего доверительного источника.
|
|
|
|
|
Jul 25 2011, 14:10
|
Группа: Участник
Сообщений: 13
Регистрация: 25-07-11
Пользователь №: 66 399

|
спасибо всем, теперь кое-что стало ясно, получается считывать из eeprom можно сколь угодно раз, а насчёт того что каждую минуту отнимать- вроде тоже многовато получается, но сама идея отличная, в конце концов можно и каждый час наверное; а вот насчёт зоны однократного прохождения программы- такой информации в книжках нигде не читал, везде начинается с нулевого адреса, и после end на следующих витках к нему же и приходит, как же реализовать такой однократный проход? в голову только приходит то что я уже писал, ставить в вместо end безусловный переход не на самое начало(например на 5-ю строку), тогда по логике, до пятой строки программа пройдёт только один раз, но можно ли так делать и чем это грозит?
Сообщение отредактировал стас - Jul 25 2011, 14:11
|
|
|
|
|
Jul 25 2011, 14:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(стас @ Jul 25 2011, 18:10)  спасибо всем, теперь кое-что стало ясно, получается считывать из eeprom можно сколь угодно раз, а насчёт того что каждую минуту отнимать- вроде тоже многовато получается, но сама идея отличная, в конце концов можно и каждый час наверное; Конечно можно. Только не много подумав , что со мной случается, я понял , что погрешность ( в случае часа ) может составлять от + 1 час до несколько веков. Если какой нить идиот будет постоянно дёргать питание системы. Но зато какое удивление это устройство вызовет у пра-пра-пра ....... внуков. Столько веков прошло,а воно взяло и заработало. Цитата(стас @ Jul 25 2011, 18:10)  а вот насчёт зоны однократного прохождения программы- такой информации в книжках нигде не читал, везде начинается с нулевого адреса, и после end на следующих витках к нему же и приходит, как же реализовать такой однократный проход? Вам же написали как это делается Цитата Палыч Значение в EEPROM можно записать при программировании ("заливке" программы). При старте по включению питания (в самом начале программы) считываем ячейку, и, если значение равно нулю, то программу не выполняем ("крутимся" в бесконечном цикле), в противном случае: вычитаем единицу и записываем новое значение в EEPROM и Цитата ViKo До того, как крутиться по кругу (называется superloop), программа со старта выполняет некую последовательность команд однократно (инициализация). Порты настроить, таймеры, прерывания и т.п. Вот в начале программы и можно отнять идиницу и записать в EEPROM . Цитата а насчёт того что каждую минуту отнимать- вроде тоже многовато получается.... Возьмите внешнюю EEPROM типа 24СХХ у них 1 миллион циклов записи . Правда придётся принять меры по защите информации в EEPROM
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 25 2011, 15:56
|
Группа: Участник
Сообщений: 13
Регистрация: 25-07-11
Пользователь №: 66 399

|
Цитата(ILYAUL @ Jul 25 2011, 18:35)  Вам же написали как это делается может я как-то не так понимаю, но по такой логике если в начале программы отнимать единицу от ранее записанного(я знаю что можно загрузить константы директивами) и результат снова помещать в eeprom, то уже через пару милисекунд (в зависимости от длины кода и изначально записанного числа) программа просто перестанет работать- поотнимает 3 раза в каждом витке и остановится, --но ведь речь шла о такой остановке только при четвёртом включении питания
|
|
|
|
|
Jul 25 2011, 21:49
|
Группа: Участник
Сообщений: 13
Регистрация: 25-07-11
Пользователь №: 66 399

|
Цитата(Палыч @ Jul 25 2011, 20:12)  О каких "витках" речь? Программу пишите Вы! Как Вы её напишите - так она и будет выполнятся! Единственно что неизменно - программа стартует с определенного адреса после подачи напряжения на МК. имею ввиду, что рано или поздно программа подойдёт к строке где написано- end, и насколько я понял она начнёт исполнятся снова с нулевого адреса, это я и называю следующим "витком", по крайней мере во всех книжках в примерах программ везде в конце кода этот end. Так что же получается, он просто чисто символическое значение имеет? что он вообще значит на самом деле? иными словами: START ---------- ----------- ----------- GOTO (не START) END программа может заканчиватся так? это допустимо?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|