Как сохранять переменные arduino, при reset

Тема в разделе "Arduino & Shields", создана пользователем Den Kiva, 4 дек 2019.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не понял про регистры. После ресета они в любом случае в одинаковом состоянии, не зависимо от того где сохранились данные - в РАМ или в ЕЕПРОМ. Или не ?
    Молотить в ЕЕПРОМ - сокращать срок службы Ардуины. Не нужны жертвы, без веских причин.
    Верю. Но какая разница ? Бутлоадер подождет секунду и запустит прогу как обычно.Тем более - опыт важнее результата.
     
    Последнее редактирование: 5 дек 2019
  2. parovoZZ

    parovoZZ Гуру

    В какое состояние уходят регистры написано в дашике. Регистры вачдога могут также не сбрасываться. В регистре MCUCR лежит причина загрузки МК.
     
  3. SergeiL

    SergeiL Оракул Модератор

    Вот в реальной жизни, как часто бывают перезапуски по ресет?
    Только при перепрошивке, отладке?
    В основном, обычно - сбои по питанию.
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    После подачи питания в этой переменной будет по-любому либо 0 либо 0xFF.
    остаётся только проверить или исправить на нужное. Если ни то ни другое - не трогаем, поэтому строчку **** надо убрать.
    Код (C++):

    int pere __attribute__ ((section (".noinit")));
    #define PIN_PLUS 7    //обьявляем переменную и пин
    #define PIN_MINUS 6   //обьявляем переменную и пин
    if (pere ==0 || pere ==FF) {pere = 0;}
    *** // int pere = 0;        //естественно этой строчки быть не должно  ***
    void setup() {
    Serial.begin(9600);
    pinMode(PIN_PLUS, INPUT);
    pinMode(PIN_MINUS, INPUT);
    }
    void loop() {
    int sensorVal = digitalRead(PIN_PLUS);
    int sensorVall = digitalRead(PIN_MINUS);

    if (sensorVal == HIGH) {pere=pere+1;delay(200); } // pere +1
    if (sensorVall == HIGH) {pere=pere-1;delay(200);} // pere -1

      Serial.println (pere); // печатаем в мониторе порта переменную

    }
     
    Последнее редактирование: 5 дек 2019
  5. SergeiL

    SergeiL Оракул Модератор

    Как по мне - кажется не очень удобно, в эксплуатации, будет.
    Если в точке подключения светильников есть возможность подключиться на постоянку к 220В, то можно в выключателе диоды поставить и выделять в светильниках верхний и нижний полупериод. Причем можно и без процессорных устройств, на реле.
    У меня, как выяснилось, провода от выключателя тянутся в коробку люстры, туда же приходят фаза и нейтраль.
    Поэтому все решается просто. Здесь писал. Работает уже давно, даже выделение полупериодов выполняется программно.
    С 2016-го только один сбой был, когда были проблемы с 220В. Жена сказала что лампочки еле светили, после этого свет в коридоре не выключался. А я как назло в командировке был. Посоветовал выключить и включить общий автомат - проблема ушла.
    Дома устройств много - это только свет:
    lights.png
     
    Последнее редактирование: 6 дек 2019
  6. asam

    asam Гик

    Если важность этого девайса хоть чуть-то выше чем просто поиграться, то ставьте внешний FRAM и пишите в него при каждом чихе. Рессурс позволяет. Цена вопроса максимум 1.5 доллара даже если брать у официального дилера.
     
    ostrov нравится это.
  7. Asper Daffy

    Asper Daffy Иксперд

    А чего тут не понимать, раздел 11.1 даташита: "During reset, all I/O Registers are set to their initial values"
     
  8. parovoZZ

    parovoZZ Гуру

    за эти деньги лучше взять готовый МК с FRAM на борту)))
     
  9. parovoZZ

    parovoZZ Гуру

    это в которой? Она у каждого своя.
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Вот че надо ставить. А не FRAM !!! >)))))))))))))))))
     

    Вложения:

  11. Asper Daffy

    Asper Daffy Иксперд

    А через 200 лет чё делать? Всё перезаписывать?
     
    ostrov, issaom, DetSimen и ещё 1-му нравится это.
  12. ostrov

    ostrov Гуру

    Дану, каждые 200 лет дергать будут. Лучше фрам, он лет на пару тысяч, даже если постараться. А если серьезно, я как-то поверил, что CD-диски рассчитаны на 100 лет. В итоге потерял кучу семейного видео, а ге прошло и лет 20. Кто эти сроки устанавливает не проверив на практике?
     
  13. parovoZZ

    parovoZZ Гуру

    Так CD диски, а не DVD-R и уж тем более DVD-RW.
     
  14. DetSimen

    DetSimen Guest

    А надо было торец по окружности лаком покрыть. Или матом. И сохранилось бы.
     
    Asper Daffy нравится это.
  15. Asper Daffy

    Asper Daffy Иксперд

    Матом дешевше.
     
    DetSimen нравится это.
  16. DetSimen

    DetSimen Guest

    Я знаю. Я так крышу на бане покрыл.
     
  17. b707

    b707 Гуру

    ну примерно так и работает эмуляция ЕЕПРОМ посредством записи во флеш на СТМ32
    При том что у физического флеша ресурс перезаписи всего 10 тыс - за счет постоянной ротации ячеек суммарный ресурс такого эмулированного ЕЕПРОМ получается миллионы циклов на ячейку
     
  18. b707

    b707 Гуру

    data retention как нафик не надо.. Прочитайте строчку на 1 выше той. что подчеркнули... - это важнее
     
  19. Ariadna-on-Line

    Ariadna-on-Line Гуру

    По даташиту у ФРАМов очень дофигища циклов , а срок хранения 10-40 лет. ПС. Как-то не обращал внимания, а таки-надо прикупить - поиграться. Но конечно не китайских брикетиков без названья.
     
    Последнее редактирование: 6 дек 2019
  20. parovoZZ

    parovoZZ Гуру

    Вот только у FRAM считаются не только циклы записи, но и чтения. Потому как после чтения ячейки ее требуется перезаписать.