Микроконтроллеры | Использование внутренего eeprom пика |
|
---|---|---|
Парни, я не ошибался, по поводу стороки while (i=25), не знаю откуда вкралась ошибка но исходный вариант, который в файле на форуме void main() |
|
|
Dad: ЗАМЕТИЛ ПРИ ПОВТОРНОЙ ПРАВКЕ СООБЩЕНИЯ НА ФОРУМЕ ЗНАЧЕК < ПРОПАДАЕТ, ВОТ ГДЕ КОСЯК И ГЛАВНОЕ ВОССТАНОВИТЬ НЕ МОГУ. Есть такой косяк на форуме, значок "меньше" почему то заменяется на . Причём тег "pre" для кода не меняет дела. Можно ставить один пробел между значками "меньше" и "равно", тогда хотя бы значки не будут исчезать и при правке. while (i< =25) // цикл |
|
|
Dad: Пока решаю задачу с упрощениями. Если предполагается сделать типа счётчика наработки на отказ, то алгоритм для задачи можно придумать такой: При каждом запуске программы в главной функции (main), считать значение переменной из eeprom, сравнить полученное значение с константой - временем наработки на отказ и, если ресурс не выработан, то инкременировать его и записать новое значение. Если есть совпадение, то сделать девайс нерабочим. Получится, что запись в eeprom будет происходить один раз и каждый раз при включении устройства и нет необходимости вводить ещё один цикл while. |
|
|
Dad: Но если его после того как он достчитал до 25 запустить по новой он опять работает. А не должен. ... int8 i; // задаем начальное значение i void main() По логике работы этой программы получается, что неважно особо, изначально в eeprom 00 или FF, но когда i станет равным 25, то в eeprom окажется число 26 и при новом запуске в неё запишется ноль и после перезапуска всё начнётся сначала. И так постоянно, если i будет достигать своего конечного значения. Попробуйте вместо while (i< =25) // цикл использовать while (i< 25) // цикл. Тогда должно получиться так, как задумали. Проверить не могу. И желательно вместо if(i>25) записать if(i>25) { |
|
|
Вчера не заметил, форум сожрал мой значок "меньше", хотя тег пре использовался. #include <16f877.h> |
|
|
Умаялся редактировать, теперь хвост вылез... |
|
|
Dad, чтобы после достижения условного значения счетчика (в вашем примере = 25) МК повторно не запустился, запишите в какую-нибудь ячейку EEPROM флаг "конца работы". Вот только есть один неприятный момент. По вашему алгоритму запись значения счетчика в EEPROM будет происходить при каждом изменении этого счетчика. А количество циклов записи в EEPROM ограничено. Т.о. есть вероятность, что при длительной эксплуатации EEPROM просто выйдет из строя. Есть уже такие примеры. |
|
|
Да, это всё верно. |
|
|
"Выжигается" одна ячейка, в которую происходит частая запись. Чтобы продлить жизнь EEPROM можно каждое новое значение писать в следующую ячейку, по достижении конца памяти снова начинать с адреса 0x00. Тогда память будет изнашиваться равномерно, что продлит срок службы в несколько раз. Но это лишь продление агонии Да и алгоритм значительно усложняется. Кстати, 32-битное значение счетчика (именно это необходимо автору?) - это порядка 4 млрд. циклов записи. EEPROM расчитано на 100 тыс. Так что память гарантированно помрет прежде, чем счетчик автора достигнет нужного значения. |
|
|
Мне в ремонте попадался телефон Русь. Ошибка еепром. Там в еепром вроде каждую секунду пишется что-то. И проблема оооочень частая на этих телефонах. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |