Можно ли менять данные записанные во flash с помощью PROGMEM
- Войдите на сайт для отправки комментариев
Чт, 18/02/2016 - 13:49
Господа, есть ли возможность работать с данными, которые записаны в виде массива во flash память? Я не нашел описания и примеров такой возможности. Если я все правильно понял, то массив с помощью PROGMEM можно разместить как константу. Далее его можно читать, но в задаче требуется работать с массивом, допустим 10000 значений unsigned long. Значения появляются в ходе работы программы, изменяют значения, удаляются, дополняются в рамках размера массива. Надеюсь, что есть ПРОФИ в данном вопросе. Буду признателен, если подскажете.
все, что находится в PROGMEM, это константа по определению. Константа задается при компиляции и неизменна.
инструкции spm ассемблера вам в руки.
записаны в виде массива во flash память?
Ну, подумайте сами, откуда же эти данные там берутся. Значит их кто-то туда записывает. А, значит, писать туда можно. Другой вопрос - нужно ли, но об этом ниже.
Я не нашел описания и примеров такой возможности.
Странно. Как можно не найти то, что написано в даташите? Или Вы в журнале "мурзилка" искали? Открываете даташит на ATmega328 и на странице 288 находите специальный раздел "28.7.4 Programming the Flash"
Значения появляются в ходе работы программы, изменяют значения, удаляются, дополняются в рамках размера массива.
Память в которую Вы хотите писать значения, которые постоянно в процессе работы программы "изменяются, удаляются, дополняются" имеет ресурс всего 10000 операций записи. Для ручной прошивки это очень много (устанете столько раз перешивать), а вот для данных, которые меняются в программе - это сущие копейки. Так что, немного попишете туда и выбросите микросхему.
Кроме того, запись в эту память очень медленная.
Если Вас устраивает медленная запись и ресурс в 10000 перезаписываний - упомянутый раздел 28.7.4 даташита на принтер и на рабочий стол. А если не устраивает, расширяйте память за счёт внешнией памяти. Это тоже достаточно подробно описано, если знать где искать описание.
Спасибо, логично. Что бы я не перелистывал подшивку Мурзилок, не сочтите за труд дать ссылочку, где описывается расширение памяти. Еще раз спасибо.
Внешний SPI SRAM не подойдёт? https://www.google.ru/search?q=25lv512+arduino&newwindow=1&sa=N&biw=1920...
инструкции spm ассемблера вам в руки.
она работает только из зоны бутлоадера.
Не совсем так, но нормально - да. Также точно может работать из основной зоны в зону бутлоадера (запись загрузчика), а равно можно работать и в той же самой зоне, но с существенными ограничениями и подготовками .. в даташите есть детальное описание, несколько корявое но вполне сойдет.
.. и да: м-э-д-л-е-н-н-о-м-э-д-л-е-н-н-о.
начните вот отсюда - http://www.scienceprog.com/adding-external-memory-to-atmega128/