Запись во flash
- Войдите на сайт для отправки комментариев
Ср, 10/03/2021 - 05:30
Приветсвую!
const uint32_t message PROGMEM = 200; void setup() { Serial.begin(9600); } void loop() { Serial.println(pgm_read_dword(&message)); }
Подскажите нубатору, давно хотел узнать, а как бы мне создать переменную во флеш памяти ардуинки шоб я мог её менять в лупе и она сохранялась после перезагрузки, такой способ существует?
в этом обьявлении
или const лишний, или PROGMEM.
То, что ты хочешь (сохранить переменную во FLASH) можно, но весьма нетривиальным образом. Гораздо проще (и правильнее) сохранять новое значение между запусками в EEPROM, в AVR это штатная возможность.
А зачем писать во флеш, если у него ресурс на пару порядков меньше, чем eeprom?
Я тоже за EEPROM, но вопрос меня заинтересовал и я выкопал это: https://mon.im/2014/11/modifying-avr-progmem-at-runtime.html
Спасибо, господа, за совет, блин, 100 раз слышал про еепром, но ни разу не вникал что это.
Работает, после перезагрузки помнит.
с нулевого адреса ничего не пиши, пиши с адреса 0х10
Почему?
одна из городских легенд гласит, что при пропадании питания, процессор в агонии начинает портить начальные адреса EEPROM. Сам с этим сталкивался только однажды, в 2016 году на ProMini, но как потом выяснилось, она сама вся бракованная была, EEPROM там хранил то что сам хотел, а не то что в него было записано. В то время, я был совсем зелёный в этих ваших Ардуинах, много погуглил и нашел эту гороцкую легенду, с тех пор в начальных адресах, до 0x10 ничего не храню. А эта ПроМини потом подохла собачьей смертью, разлетевшись огненным дымным салютом по всему огороду.
https://chipenable.ru/index.php/programming-avr/165-avr-eeprom-problemi....
Аааа :) понятно, не сталкивался с таким, и надеюсь, не столкнусь.
Я тоже за EEPROM, но вопрос меня заинтересовал и я выкопал это: https://mon.im/2014/11/modifying-avr-progmem-at-runtime.html
вирусописатели и до микроконтроллеров добрались )))
Я тоже за EEPROM, но вопрос меня заинтересовал и я выкопал это: https://mon.im/2014/11/modifying-avr-progmem-at-runtime.html
вирусописатели и до микроконтроллеров добрались )))
Ты зря смеёшся, там можно хранить, например, щёччик запусков, или серийный номер своего поделия. И, если закащик тебя кинул, то через некоторое время изделие работать откажется, ведь "правильную" версию (без щёччика) ты же ему не пришлёшь, скатине.
одна из городских легенд гласит,
Я всегда в этих адресах самое важное храню (вот где вы раньше то были?)))), чтобы легче вспоминать было, куда что положил Ни разу не сталкивался со сбоями. Но теперь вот буду нервничать ))
Хотя вру. Ну буду. Я полностью перешел на i2c FRAM. Перепаял штатные АТ24 во всех ds3231
Проблема с 0-й ячейкой ЕЕПРОМ была на заре AVRостроения. Уже пофиксили давно.
Я тоже за EEPROM, но вопрос меня заинтересовал и я выкопал это: https://mon.im/2014/11/modifying-avr-progmem-at-runtime.html
вирусописатели и до микроконтроллеров добрались )))
Ты зря смеёшся, там можно хранить, например, щёччик запусков, или серийный номер своего поделия. И, если закащик тебя кинул, то через некоторое время изделие работать откажется, ведь "правильную" версию (без щёччика) ты же ему не пришлёшь, скатине.
я не смеялся, я просто улыбнул Садмана, вирусу место если бы была возможность обновления прошивки, а для каких не деструктивных целей можно использовать память программ - понятно
https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_eeprom_corruption
...
In older generation AVRs the EEPROM Address Register (EEAR) is initialized to zero on reset, be it from Brown Out Detect, Watchdog or the Reset Pin. If an EEPROM write has just started at the time of the reset, the write will be completed, but now at address zero instead of the requested address. If the reset occurs later in the write process both the requested address and address zero may be corrupted.
...
Испытал другой способ писания в PROGMEM. Welcome: http://arduino.ru/forum/programmirovanie/progmem-tricks?page=2#comment-593368
вчера этот скеч протестировал
ну и забыл абдуринку с кампа дёрнуть чесов на 8 , получается она перезаписала 1 адрес 8*60*60*2=57600 раз
Боже, боже, боже.
вчера этот скеч протестировал
ну и забыл абдуринку с кампа дёрнуть чесов на 8 , получается она перезаписала 1 адрес 8*60*60*2=57600 раз
Боже, боже, боже.
уверены?